標題: 【轉】Delphi中L制IdHTTP使用HTTP1.1
無頭像
canonpapago

帖子 28
註冊 2013-4-18
用戶註冊天數 4084
發表於 2020-4-8 20:42 
115.43.252.58
分享  私人訊息  頂部
【轉】Delphi中L制IdHTTP使用HTTP1.1
前两天韙H写程序

用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.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协议了。
摘自:http://hi.baidu.com/gcwocxuedxfnwzr/item/1f25202dd39bb7160975086f