HTTP請求流程:
a, 首先我們需要調用InternetOpen函數,擷取一個session得句柄,句柄的類型為
HINTERNET,注意程式執行完畢後需要調用InternetCloseHandle函數釋放資源
b, 擷取到session得句柄後,接着就要調用InternetConnect
c, 然後根據擷取到得connect的句柄,調用HttpOpenRequest函數,
d, 然後調用HttpSendRequest函數
f, 調用HttpQuerInfo函數來判斷請求的狀态碼
g, 如果請求碼為200,那麼繼續執行,否則退出
h, 調用InternetReadFile函數讀取資料,一般在一個while循環中運用
2. 由于Internet API得操作都比較容易出錯,尤其是裡邊的很多FLAG的組合比較複雜。現在
貼出部分代碼:
m_Session = InternetOpen(_T("PushMode"),0,NULL,NULL,0 );
m_pConnect = InternetConnect(m_Session,
(LPCTSTR)(_bstr_t)m_IPAddress,
INTERNET_DEFAULT_HTTP_PORT,
NULL,NULL,
INTERNET_SERVICE_HTTP,0,NULL);
if(::InternetAttemptConnect(NULL)!=ERROR_SUCCESS)
{
int error = GetLastError();
InternetCloseHandle(m_pConnect);
InternetCloseHandle(m_Session);
return;
}
HINTERNET hRequest = HttpOpenRequest(m_pConnect,NULL,(LPCTSTR)(_bstr_t)
szCGI,_T("HTTP/1.1"),NULL,image,
INTERNET_FLAG_HYPERLINK
| INTERNET_FLAG_KEEP_CONNECTION
| INTERNET_FLAG_NO_UI
| INTERNET_FLAG_RESYNCHRONIZE
| INTERNET_FLAG_NO_CACHE_WRITE
| INTERNET_FLAG_PRAGMA_NOCACHE
| INTERNET_FLAG_RELOAD,NULL);
HttpSendRequest(hRequest,(LPCTSTR)(_bstr_t)strHeaders,_tcslen((LPCTSTR)
(_bstr_t)strHeaders),NULL,0)
HttpQueryInfo(hRequest,HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,
&m_dwStatusCode,&dwStatusSize,NULL);
InternetReadFile(hRequest,szBuff,2000,&nRead)