gpt4 book ai didi

perl - 如何更改 Perl 的 LWP 发送的 HTTP 请求 header 的顺序?

转载 作者:行者123 更新时间:2023-12-04 23:06:15 25 4
gpt4 key购买 nike

对于测试,我需要对网站进行 get requets - 不幸的是,当使用 perl lwp 时,“连接”出现在主机的标题 b4 中。因此,请求会被 Web 应用程序防火墙过滤。我所需要的只是删除或向下移动标题中的连接线。当我用我的脚本做请求时:

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

但是它应该看起来像这样工作(连接在主机之后):
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, "$method $uri HTTP/$ver", @h3, "", $content));



* — 根据 HTTP/1.1 规范 RFC 2616,“接收具有不同字段名称的 header 字段的顺序并不重要。”

关于perl - 如何更改 Perl 的 LWP 发送的 HTTP 请求 header 的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13808050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com