我正在使用一个名为SimTT的开放源代码工具,该工具会获取平板电脑联盟的网址,然后计算可能的结果(例如,球队和球员的排名)。不幸的是,该网页已移至其他网页。
我下载了开放源代码并修复了该网页的解析,但是目前我只能手动下载该页面,然后从文件中读取它。
下面您可以找到我的代码摘录,以检索页面。它显示成功,但响应为空。不幸的是,我对Perl和Web技术并不十分熟悉,但是在Wireshark中,我可以看到发送的最后一件事是新的会话密钥。但我不确定是否该问题与Cookie,ssl或类似问题有关。
如果有人可以帮助我获得访问权限,那将非常好。我知道有些人想使用该工具。
因此,代码如下:
use LWP::UserAgent ();
use HTTP::Cookies;
my $ua = LWP::UserAgent->new(keep_alive=>1);
$ua->agent('Mozilla/5.0');
$ua->cookie_jar({});
my $request = new HTTP::Request('GET', 'https://www.mytischtennis.de/clicktt/ByTTV/18-19/ligen/Bezirksoberliga/gruppe/323819/mannschaftsmeldungen/vr');
my $response = $ua->request($request);
if ($response->is_success) {
print "Success: ", $response->decoded_content;
}
else {
die $response->status_line;
}
答案 0 :(得分:2)
服务器上有一些基本的反僵尸防护,或者服务器配置错误或损坏。看起来它期望在请求中具有Accept-Encoding
头,默认情况下LWP不会发送该头。此标头的值似乎并不重要,即如果客户端声称支持,则服务器将发送使用gzip
压缩的内容,但是如果客户端仅提供未知的压缩方法,它将发送未压缩的数据到服务器。
有了这些知识,就可以像这样更改代码:
my $request = HTTP::Request->new('GET',
'https://www.mytischtennis.de/clicktt/ByTTV/18-19/ligen/Bezirksoberliga/gruppe/323819/mannschaftsmeldungen/vr',
[ 'Accept-Encoding' => 'foobar' ]
);
通过此简单的更改,该代码目前对我有效。请注意,如果将更改服务器设置,则它可能随时更改,即随后可能需要其他解决方法。