Как видно из названия WWW :: Mechanize не распознает
<base href="" />
если содержимое страницы из архива. Вот пример:
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?
Редактировать 2:
Это ошибка LWP или HTTP :: Response, а не WWW :: Mechanize. LWP по умолчанию не запрашивает gzip. Если я установлю
$ua->default_header('Accept-Encoding' => 'gzip'),
в приведенном выше примере возвращает неверное основание
Редактировать 3:
Ошибка в LWP / UserAgent.pm в parse_head ()
Он вызывает HTML / HeadParser с заархивированным HTML, и HeadParser не знает, что с ним делать. LWP должен распаковать содержимое перед вызовом процедуры синтаксического анализа.