2017-06-21 37 views
0

我試圖檢索使用LWP :: UserAgent的頁面,但我不斷收到一個「500內部服務器錯誤」作爲響應。在Firefox中檢索完全相同的頁面(使用全新的「私人窗口」 - 所以沒有任何Cookie設置)成功沒有問題。獲取「500內部服務器錯誤」與LWP :: UserAgent檢索頁面

我重複了與Firefox發送完全一樣的標題,但這仍然沒有什麼區別。這裏是我的完整代碼:

use strict; 
use LWP::UserAgent; 

my $browserObj = LWP::UserAgent->new(); 
$browserObj->cookie_jar({}); 
$browserObj->timeout(600); 

my @header = (
    'Host' => 'www.somedomain.com', 
    'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0', 
    'Accept-Language' => 'en-US,en;q=0.5', 
    'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'Accept-Encoding' => 'gzip, deflate, br', 
    'DNT' => '1', 
    'Connection' => 'keep-alive', 
    'Upgrade-Insecure-Requests' => '1' 
); 

my $URL = "https://www.somedomain.com"; 

my $response = $browserObj->get($URL, @header); 
if($response->is_success) { 
    print "Success!\n"; 
} else { 
    print "Error: " . $response->status_line . ".\n"); 
} 

真正的網址是「www.somedomain.com」之外的東西。事實上,這是一個網上賭場的網址,但我不希望我的問題被視爲垃圾郵件。

但任何人的任何想法可能是錯的什麼?

+3

這是不可能沒有真正的URL說。標題看起來很好。無論如何,如果你做錯了什麼,服務器不應該以500響應。 500意味着服務器做錯了什麼。既然你不控制服務器,除非服務器太愚蠢以至於無法正確運行(這可能是故意的),否則我們似乎無能爲力。 – simbabque

+3

嘗試使用'perl -MIO :: Socket :: SSL = debug4 program.pl'運行你的代碼,這樣可以在出現問題時在SSL級別提供信息。由於標題通常包含更詳細的錯誤描述,因此還要添加完整的響應。並請添加您正在使用的LWP版本。如果您使用代理,請確保至少使用LWP 6.06版。除此之外:我很確定LWP不能處理'br'壓縮,但是你在'Accept-Encoding'中宣佈了這個。 –

+1

LWP :: UserAgent還會在連接失敗時返回500錯誤,從而推定服務器出現故障,但這並不是保證。你是否支持代理? –

回答

1

在我們其中有一個代理(和過時的perl版本 - 有可能是在新版本中更好的選擇)的企業網絡,我們往往會添加以下一個權衡:

BEGIN { 
    $ENV{HTTPS_DEBUG} = 1; # optional but can help if you get a response 
    $ENV{HTTPS_PROXY} = 'https://proxy.server.here.net:8080'; 
} 

如果我們不要這樣做腳本根本無法連接沒有其他信息。

你也可以,如果你想檢查郵件中添加這樣的事情:

$browserObj->add_handler("request_send", sub { shift->dump; return }); 
$browserObj->add_handler("response_done", sub { shift->dump; return }); 
+1

您也可以使用https://metacpan.org/pod/LWP::ConsoleLogger::Everywhere。只需將它放入代碼中,它就會告訴你所有的LWP :: UA。 – simbabque