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

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)
{
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文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值