WinHttp方法通过HTTP协议向服务器发送请求,返回结果
来源:互联网 发布:java 服务端mqtt推送 编辑:程序博客网 时间:2024/05/01 23:12
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
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错误
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
- WinHttp方法通过HTTP协议向服务器发送请求,返回结果
- Android--使用Http向服务器发送请求并取得返回结果,下载图片
- Android--使用Http向服务器发送请求并取得返回结果,下载图片
- Android之通过HTTP协议向服务器发送XML数据
- android通过httpPost向服务器发送请求
- android通过httpPost向服务器发送请求 .
- android通过httpPost向服务器发送请求
- echarts通过ajax向服务器发送post请求,servlet从数据库读取数据并返回前端
- 怎么通过http向服务器发送数据并接受到返回的数据
- [Erlang 学习笔记] 通过 erlang 向服务器发送 http post 请求
- Android--通过Http协议向web服务器发送XML数据和调用webService
- http 发送xml到服务器,服务器处理之后返回结果
- http 发送json到服务器,服务器处理之后返回结果
- Android向Http服务器发送Http请求异常-UnknowHostException
- Android向Http服务器发送Http请求异常-UnknowHostException
- 用.NET C# 发送HTTP 请求,返回结果
- MFC怎样发送http请求并接受返回的结果?
- 用PHP发送HTTP POST 请求,获得返回结果。(转)
- 计算机网络:网络层
- solr入门之权重排序方法初探之使用edismax改变权重
- 加入transaction.addToBackStack(null); 之后,仍直接退出问题解决。
- nginx 访问路径配置
- 图的周游
- WinHttp方法通过HTTP协议向服务器发送请求,返回结果
- Java tree递归
- ReleaseDC和DeleteDC的区别
- JAVA——this语句
- activity间的传值
- 正则表达式基础
- Android Activity 图形化生成简读 <3>
- 毕业工作五年的总结和感悟(中)
- 谈谈你怎么理解产品经理