Delphi中强制IdHTTP使用HTTP1.1


本文整理自网络,侵删。

 
前两天帮人写程序

用IdHTTP控件往一网站发包

如下:

Delphi代码

IdHTTP1.Request.Connection:='Keep-Alive'; 

IdHTTP1.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)'; 

// idhttp1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)';

idHTTP1.Request.ContentType:='application/x-www-form-urlencoded'; 

IdHTTP1.Request.Referer:='http://www.xxx.com'; 

IdHTTP1.Request.Accept:='image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*'; 

IdHTTP1.Request.AcceptLanguage:='zh-cn'; 

IdHTTP1.Request.AcceptEncoding:='gzip, deflate'; 

IdHTTP1.Request.CacheControl:='no-cache'; 

IdHTTP1.ReadTimeout:=60000; 

IdHTTP1.ProtocolVersion:=pv1_1; 

sHtml:=IdHTTP1.Post('http://www.xxx.com/login.asp',sPost);

但用抓包工具看,却发现是用的http1.0,而不是http1.1,明明设置了IdHTTP1.ProtocolVersion:=pv1_1

查看INDY的源码,发现在IdHTTP.pas中有如下代码和注释:

Delphi代码

OldProtocol := FProtocolVersion; 

// If hoKeepOrigProtocol is SET, is possible to assume that the developer 

// is sure in operations of the server 

if not (hoKeepOrigProtocol in FOptions) then 

FProtocolVersion := pv1_0;

原因很明显了,于是改代码:

Delphi代码

IdHTTP1.Request.Connection:='Keep-Alive'; 

IdHTTP1.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)'; 

IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded'; 

IdHTTP1.Request.Referer:='http://www.xxx.com'; 

IdHTTP1.Request.Accept:='image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*'; 

IdHTTP1.Request.AcceptLanguage:='zh-cn'; 

IdHTTP1.Request.AcceptEncoding:='gzip, deflate'; 

IdHTTP1.Request.CacheControl:='no-cache'; 

IdHTTP1.ReadTimeout:=60000; 

IdHTTP1.HTTPOptions:=IdHTTP1.HTTPOptions+[hoKeepOrigProtocol];//关键这行 

IdHTTP1.ProtocolVersion:=pv1_1; 

sHtml:=IdHTTP1.Post('http://www.xxx.com/login.asp',sPost);

再用抓包工具看,能看到确实是使用http1.1协议了。

相关阅读 >>

Delphi int64 与 currency

Delphi读取utf8格式ini及取得动态�热�

Delphi 选择一张照片,让照片缩略图显示在图片控件中间

Delphi adoquery查询,如何得到查询记录数?

Delphi 自带的 base64 编解码函数

Delphi 检查当前用户权限

Delphi tdictionary 泛型如何排序

Delphi xe8安卓下汉字转gb2312

Delphi 直接将html字符串读入webbrowser中

Delphi 中的md5实现方法及Delphi2009和Delphi2010中用法

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...