如何更改Perl的LWP发送的HTTP请求标头的顺序?

前端之家收集整理的这篇文章主要介绍了如何更改Perl的LWP发送的HTTP请求标头的顺序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于测试,我需要对网站进行一次获取 – 不幸的是,当使用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,“接收到具有不同字段名称的头字段的顺序并不重要.”

猜你在找的Perl相关文章