Ошибка 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/#.##,

Другие вопросы по тегам