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)