您的位置:首页 > 理论基础 > 计算机网络

WinHttp方法通过HTTP协议向服务器发送请求,返回结果

2016-04-15 19:32 766 查看
URL_COMPONENTS urlComp;

DWORD dwSize = 0;

WCHAR* lpOutBuffer = NULL;

HINTERNET hSession = NULL,hConnect = NULL , hRequest = NULL;

BOOL bResults = FALSE;

ZeroMemory(&urlComp,sizeof(urlComp));

urlComp.dwStructSize = sizeof(urlComp);
//分解链接

if(!WinHttpCrackUrl(url.wc_str(),(DWORD)wcslen(url.wc_str()),0,&urlComp))

{
url = HString("http://") + url;
if(!WinHttpCrackUrl(url.wc_str(),(DWORD)wcslen(url.wc_str()),0,&urlComp))
{
return WH_ILLEGAL_URL;
}

}

//测试是否有代理服务器
WINHTTP_CURRENT_USER_IE_PROXY_CONFIG  ie_proxy_config
WinHttpGetIEProxyConfigForCurrentUser(ie_proxy_config);

if(ie_proxy_config !=NULL){
hSession = WinHttpOpen("User Agent",WINHTTP_ACCESS_TYPE_NAMED_PROXY,ie_proxy_config.lpszProxy,ie_proxy_config.lpszProxyBypass,0);

else

hSession =
WinHttpOpen

("User Agent",WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,WINHTTP_NO_PROXY_NAME,

WINHTTP_NO_PROXY_BYPASS,0);

}

hConnect=WinHttpConnect(hSession,host_name.wc_str(),INTERNET_DEFAULT_HTTP_PORT,0);

hRequest = WinHttpOpenRequest(hConnect,"GET",path_after_host_name.wc_str(),"HTTP/1.1",WINHTTP_NO_BUFFER,WINHTTP_DEFAULT_ACCEPT_TYPES,0);

hResults = WinHttpSendRequest(hRequest,WINHTTP_NO_ADDITIONAL_HEADERS,0,WINHTTP_NO_REQUEST_DATA,0,0,0);

if(bResults)

{
bResults = WinHttpReceiveResponse(hRequest,NULL);

}

if(bResults)

{
bResults=WinHttpQueryHeaders

(hResquest,WINHTTP_QUERY_RAW_HEADERS_CRLF,WINHTTP_HEADER_NAME_BY_INDEX,NULL,&dwSize,WINHTTP_NO_HEADER_INDEX);

  
if(GetLastError() == ERROR_INSUFFICIENT_BUFFER
4000
)
{
lpOutBuffer = new WCHAR[dwSize/sizeof(WCHAR)];
bResults = WinHttpQueryHeaders(hRequest,WINHTTP_QUERY_RAW_HEADERS_CRLF,WINHTTP_HEADER_NAME_BY_INDEX,(LPVOID)lpOutBuffer,&dwSize,WINHTTP_NO_HEADER_INDEX);
}

}

//获取HTTP结果码的方法

if(lpOutBuffer) delete[] lpOutBuffer;

if(hRequest) WinHttpCloseHandle(hRequest);

if(hConnect) WinHttpCloseHandle(hConnect);

if(hSession) WinHttpCloseHandle(hSession);
1.调用WinHttpQueryHeaders 的条件:WinHttpReceiveResponse被成功调用。

   WinHttpQueryHeaders设置第四个参数为NULL或者 WINHTTP_NO_OUTPUT_BUFFER 调用GetLastError()肯定返回ERROR_INSUFFICIENT_BUFFER错误

2.WinHttpQueryHeaders 中lpOutBuffer是存放http返回结果的缓冲

3.蓝字函数参考MSDN文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: