簡體   English   中英

如何更改Perl的LWP發送的HTTP請求標頭的順序?

[英]How do I change the order of HTTP request headers sent by Perl's LWP?

對於測試,我需要對網站進行一次獲取 - 不幸的是,當使用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, "$method $uri HTTP/$ver", @h3, "", $content));



* - 根據HTTP / 1.1規范RFC 2616,“接收到具有不同字段名稱的頭字段的順序並不重要。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM