Ошибка 403 при использовании LWP::UserAgent, но не с WWW::Mechanize
Я пытаюсь получить доступ к сайту, используя Perl5 и LWP::UserAgent. Однако после подключения скрипт умирает с сообщением "403 доступ запрещен". Странная часть в том, что он работает безупречно, используя WWW::Mechanize, но код выборки точно такой же. Обычно я подозреваю, что причиной является пользовательский агент, но, как упоминалось ранее, код одинаков в обоих случаях.
Есть ли разница в том, как WWW::Mechanize и LWP::UserAgent обрабатывают запросы, которые могут вызвать эту проблему?
Вот пример кода, который демонстрирует два разных подхода.
# Mechanize
use strict;
use warnings "all";
use WWW::Mechanize;
my $mech = WWW::Mechanize->new(
agent_alias => 'Mozilla/5.0',
show_progress => 1);
my $mech->get("www.foo.com");
# LWP
use strict;
use warnings "all";
use LWP::UserAgent;
my $ua = LWP::UserAgent->new(
agent_alias => 'Mozilla/5.0',
show_progress => 1);
my $r = $ua->get("www.foo.com");
1 ответ
Здесь нет agent_alias
аргумент задокументирован, ни для LWP::UserAgent, ни для WWW::Mechanize. И там тоже нет agent_alias
аргумент реализации. Вместо этого аргумент игнорируется в обоих случаях, и он использует встроенное значение по умолчанию. Но по умолчанию другое. E сть agent_alias
хотяметод для WWW::Mechanize. Из документации:
...Например,
$mech->agent_alias( 'Windows IE 6' );
устанавливает ваш User-Agent на
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Согласно документации LWP::UserAgent, аргумент, который вы на самом деле хотите использовать, правильно называется agent
и по умолчанию libwww-perl/#.###
(#.###
будучи номером версии). С WWW::Mechanize можно использовать один и тот же аргумент, но задокументированное другое значение по умолчанию WWW-Mechanize/#.##
,