2012-12-10 20 views
4

爲了測試我需要做一個網站的請求 - 不幸的是,當使用perl lwp時,「連接」出現在主機的頭部b4中。因此,請求會被Web應用程序防火牆過濾。我需要的只是刪除或移動標題中的連接線。當我和我的腳本做requets:如何更改由Perl的LWP發送的HTTP請求頭的順序?

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");.. 

THX在前進!

回答

3

要解決在防火牆*的錯誤,改變Net/HTTP.pm

return _bytes(join($CRLF, "$method $uri HTTP/$ver", @h2, @h, "", $content)); 

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,「其中的順序接收到不同字段名稱的h頭字段並不重要。「

+0

修復了我的代碼中的一個錯誤。 – ikegami

相關問題