标题显示WWW :: Mechanize无法识别
<base href="" />
如果页面内容iz gzipped。这是一个例子:
use strict;
use warnings;
use WWW::Mechanize;
my $url = 'http://objectmix.com/perl/356181-help-lwp-log-after-redirect.html';
my $mech = WWW::Mechanize->new;
$mech->get($url);
print $mech->base()."\n";
# force plain text instead of gzipped content
$mech->get($url, 'Accept-Encoding' => 'identity');
print $mech->base()."\n";
输出:
http://objectmix.com/perl/356181-help-lwp-log-after-redirect.html
http://objectmix.com/ <--- this is correct !
我在这里遗漏了什么吗?感谢
编辑:我只是直接用LWP :: UserAgent测试它,它没有任何问题:
use LWP::UserAgent;
my $ua = LWP::UserAgent->new();
my $res = $ua->get('http://objectmix.com/perl/356181-help-lwp-log-after-redirect.html');
print $res->base()."\n";
输出:
http://objectmix.com/
这看起来像WWW :: Mechanize bug?
编辑2: 它是LWP或HTTP :: Response错误,而不是WWW :: Mechanize。 LWP默认不请求gzip。如果我设置
$ua->default_header('Accept-Encoding' => 'gzip'),
在上面的示例中,它返回错误的基础
编辑3: 错误在parse_head()中的LWP / UserAgent.pm
它使用gzip压缩HTML调用HTML / HeadParser,HeadParser不知道如何处理它。在调用解析子例程之前,LWP应该对内容进行gunzip。
答案 0 :(得分:1)
有关于此的错误报告:https://rt.cpan.org/Public/Bug/Display.html?id=54361
结论:LWP缺少这个“功能”。
<强> WWW ::机械化:强>
最终可以通过使用您自己的pkg重载WWW :: Mechanize中的_make_request()并通过decode_content重新设置HTTP :: Response来解决这个问题,甚至可以通过使用解析库来覆盖$ mech-&gt; {base}来解决这个问题。内容。
答案 1 :(得分:0)
我认为这不是一个错误,它是一个功能。 WWW :: Mechanize试图变得聪明,因为如果某些浏览器看到基础href =&#34;&#34;&#39;&#39;有些人则采取其他行动。
什么时候基地设置为prroperly?
我认为使用&#34;&#34;或/作为基础。
<base href="" />
<base href="/" />