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; } |