注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

_

_

 
 
 

日志

 
 

wininet api函数使用经验  

2013-02-16 23:27:44|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一.使用HttpSendRequestEx后,如需使用HttpQueryInfo,需先用HttpEndRequest结束Request

二.BOOL HttpQueryInfo(
IN HINTERNET hHttpRequest,
IN DWORD dwInfoLevel,
IN LPVOID lpvBuffer,
IN LPDWORD lpdwBufferLength,
IN OUT LPDWORD lpdwIndex,
);

lpdwBufferLength会返回所需的Buffer大小,因此如果多次使用此函数,需要多次对lpdwBufferLength赋值,否则会出现ERROR_INSUFFICIENT_BUFFER错误

示例程序:

hHttpFile=HttpOpenRequest(hConnect,"POST","/avlab/index.php",NULL,NULL,0,
INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_NO_COOKIES|INTERNET_FLAG_KEEP_CONNECTION
|INTERNET_FLAG_RELOAD,0);
HttpAddRequestHeaders(hHttpFile,szCookie,-1,HTTP_ADDREQ_FLAG_ADD);
HttpAddRequestHeaders(hHttpFile,"Content-Type: application/x-www-form-urlencoded",-1,HTTP_ADDREQ_FLAG_ADD);
HttpSendRequestEx(hHttpFile,&struInterIn,NULL,NULL,NULL);
HttpEndRequest(hHttpFile,NULL,NULL,NULL);

nLength=512;//这一句很重要,,因为HttpQueryInfo返回的时候,会改变此值
HttpQueryInfo(hHttpFile,HTTP_QUERY_SET_COOKIE,szBuffer,(unsigned long *)&nLength,NULL);

三.使用InternetReadFile一定要记得比较已经读取的字节数,以确定数据是否已经全部读完

如果InternetReadFile未把response的数据读完,后续的request会被response数据淹没,而得不到服务端的及时响应或者无响应.这时候再HttpSendRequest,后续的HttpQueryInfo会不成功

四.字符串操作时,一定要检查返回值,以防后续代码进行非法操作

五.

如果向网页提交带参数的get或者post命令,网站需要处理时间,其返回网址的内容可能还没有更新过,如果需要获取更新后的内容,需要对更新前后的内容进行比较

六.

HttpSendRequest或者HttpSendRequestEx发送消息后如果未接受到response,则会返回NULL,Error Code被设为12002,即超时错误,可以使用 InternetSetOption(hHttpFile,INTERNET_OPTION_SEND_TIMEOUT,&timeout,sizeof(DWORD)); 设置超时时间

七.

不能太依赖服务器提供的文件大小,因为有的时候服务器并不提供文件大小,此时如果再使用HttpQueryInfo获取大小,则会出错,GetLastError()返回值为12150

  评论这张
 
阅读(594)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017