天天看点

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)

继续阅读