아놔...
대충 검색하고 하다 보니.. username / password가 있는지도 몰랐네
한마디로 하루 작업한거 괜히 뻘짓 되는 저 마법의 두 인자.. -_ㅠ
CHttpConnection* GetHttpConnection( LPCTSTR pstrServer, INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER, LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL ); CHttpConnection* GetHttpConnection( LPCTSTR pstrServer, DWORD dwFlags, INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER, LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL ); |
[링크 : https://msdn.microsoft.com/ko-kr/library/59kzsz14(v=vs.71).aspx]
---
수동으로.... 구현 -_ㅠ 아놔..
아무튼 AddRequestHeaders()는 제대로 된 형태가 아니면 삽입이 되지 않고
해당 HTTPConnection은 재사용해도 문제가 되진 않는다.
pHttpFile->SendRequest(); pHttpFile->QueryInfoStatusCode(m_dwStatusCode); pHttpFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, szHeaders); switch(m_dwStatusCode) { case HTTP_STATUS_OK: { CString strResult; while(pHttpFile->ReadString(strResult)) { strResult.ReleaseBuffer(); } } break; case HTTP_STATUS_DENIED: // unauthorized { CString realm; CString nonce; CString cnonce("0000000000"); CString str; pHttpFile->QueryInfo(HTTP_QUERY_WWW_AUTHENTICATE, szHeaders); delete pHttpFile; int curPos = 0; CString resToken; CString key; CString val; resToken = szHeaders.Tokenize(_T(" "), curPos); while(!resToken.IsEmpty()) { // Obtain next token key = resToken = szHeaders.Tokenize(_T("="), curPos); val = resToken = szHeaders.Tokenize(_T("\""), curPos); resToken = szHeaders.Tokenize(_T(" "), curPos); if(0 == key.Compare(_T("nonce"))) nonce = val; if(0 == key.Compare(_T("realm"))) realm = val; } CString HA1,HA2,RES; HA1 = md5gen(str = id+":"+realm+":"+pw); HA2 = md5gen(str = CString("GET:")+query); RES = md5gen(str = HA1+":"+nonce+":00000001:"+cnonce+":auth:"+HA2); pHttpFile = pHttpConnect->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject); auth.Append(_T("Authorization: ")); auth.Append(szHeaders); auth.Append(_T(",username=\"")); auth.Append(id+"\","); auth.Append(_T("uri=\"")); auth.Append(query+"\","); auth.Append(_T("cnonce=\"")); auth.Append(cnonce+"\","); auth.Append(_T("nc=00000001,response=\"")); auth.Append(RES+"\","); pHttpFile->AddRequestHeaders(auth); pHttpFile->SendRequest(); pHttpFile->QueryInfoStatusCode(m_dwStatusCode); pHttpFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, szHeaders); pHttpFile->Read(content, pHttpFile->GetLength()); } break;
default: break; } if(pHttpFile) {pHttpFile->Close(); delete pHttpFile; pHttpFile = NULL; } if(pHttpConnect) {pHttpConnect->Close(); delete pHttpConnect; pHttpConnect = NULL; } if(pSession) {pSession->Close(); delete pSession; pSession = NULL; } |
'Programming > C Win32 MFC' 카테고리의 다른 글
bit field와 컴파일러별 byte align (0) | 2017.03.27 |
---|---|
MFC CButton 마우스 클릭시 작동하기 (0) | 2017.03.08 |
만능의 tokenizer?! (0) | 2017.03.03 |
mfc md5 (2) | 2017.03.03 |
ms c++ 관련 신규 문법(?) (0) | 2017.03.03 |