获取“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”之外的东西。事实上,这是一个网上赌场的网址,但我不希望我的问题被视为垃圾邮件。
但任何人的任何想法可能是错的什么?
答
在我们其中有一个代理(和过时的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
这是不可能没有真正的URL说。标题看起来很好。无论如何,如果你做错了什么,服务器不应该以500响应。 500意味着服务器做错了什么。既然你不控制服务器,除非服务器太愚蠢以至于无法正确运行(这可能是故意的),否则我们似乎无能为力。 – simbabque
尝试使用'perl -MIO :: Socket :: SSL = debug4 program.pl'运行你的代码,这样可以在出现问题时在SSL级别提供信息。由于标题通常包含更详细的错误描述,因此还要添加完整的响应。并请添加您正在使用的LWP版本。如果您使用代理,请确保至少使用LWP 6.06版。除此之外:我很确定LWP不能处理'br'压缩,但是你在'Accept-Encoding'中宣布了这个。 –
LWP :: UserAgent还会在连接失败时返回500错误,从而推定服务器出现故障,但这并不是保证。你是否支持代理? –