Perl的get请求返回空响应,也许与会话有关?

时间:2018-07-15 19:34:34

标签: perl session cookies get

我正在使用一个名为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;
}

1 个答案:

答案 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' ]
);

通过此简单的更改,该代码目前对我有效。请注意,如果将更改服务器设置,则它可能随时更改,即随后可能需要其他解决方法。