如何更改Perl的LWP发送的HTTP请求标头的顺序?
发布时间:2020-12-16 06:15:25 所属栏目:大数据 来源:网络整理
导读:对于测试,我需要对网站进行一次获取 – 不幸的是,当使用perl lwp时,“连接”出现在主机的标题b4中.结果,请求被Web应用程序防火墙过滤.我只需要删除或下移标题中的连接线.当我用我的脚本执行requets时: use warnings;use IO::Socket;use LWP::UserAgent;use
对于测试,我需要对网站进行一次获取 – 不幸的是,当使用perl lwp时,“连接”出现在主机的标题b4中.结果,请求被Web应用程序防火墙过滤.我只需要删除或下移标题中的连接线.当我用我的脚本执行requets时:
use warnings; use IO::Socket; use LWP::UserAgent; use LWP::Protocol::http; use HTTP::Request; my $ua = LWP::UserAgent->new(); push(@LWP::Protocol::http::EXTRA_SOCK_OPTS,SendTE => 0,PeerHTTPVersion => "1.1"); $ua->default_header(Cookie => 'XXX',User-Agent => 'whateva'); my $request = $ua->get('https://www.test.com/test.html?...'); .... 标题看起来像这样: GET /test.html?... HTTP/1.1 Connection: close Host: www.test.com User-Agent: whateva Cookie: XXXX 但它应该看起来像这样工作(conenction来自主机): GET /test.html?... HTTP/1.1 Host: www.test.com Connection: close User-Agent: whateva Cookie: XXXX 如何摆脱LWP中的连接线?我只需要重新编写它……它不是需要完全删除它;我很高兴再次在那里添加它作为 # $userAgent->default_header ("Connection" => "keep-alive");.. 很多提前! 解决方法
要解决防火墙*中的错误,请进行更改
return _bytes(join($CRLF,"$method $uri HTTP/$ver",@h2,@h,"",$content)); 在Net / HTTP.pm中 my @h3 = ( @h2,@h ); if (my ($idx) = grep /^Host:/,0..$#h3) { unshift(@h3,splice(@h3,$idx,1)); } return _bytes(join($CRLF,@h3,$content)); * – 根据HTTP / 1.1规范RFC 2616,“接收到具有不同字段名称的头字段的顺序并不重要.” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |