天天看點

Wininet API總結

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)

繼續閱讀