加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何更改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,“接收到具有不同字段名称的头字段的顺序并不重要.”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读