获取“500内部服务器错误”与LWP :: UserAgent检索页面

获取“500内部服务器错误”与LWP :: UserAgent检索页面

问题描述:

我试图检索使用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错误,从而推定服务器出现故障,但这并不是保证。你是否支持代理? –

在我们其中有一个代理(和过时的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