Почему время ожидания моей программы WWW::Mechanize при попытке входа в систему?

Сайт, на котором я просматривал скрининг (на который у меня есть кредиты) недавно изменил свой сервер и заблокировал порт 80. Я подумал, что мог бы просто использовать порт 443 для https, но сейчас я получаю ошибку тайм-аута. Я просто создаю новый объект WWW::Mechanize и использую get() для очистки сайта.

У меня вопрос, нужно ли мне добавлять cookie сейчас, когда они используют https?

Это правильный способ добавить банку печенья?

my $agent = WWW::Mechanize->new();

$agent->agent('Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.3) Gecko/20100407 Ubuntu/9.10 (karmic) Firefox/3.6.3');

# we need cookies
$agent->cookie_jar(HTTP::Cookies->new);

Это ошибка:

Попытка войти в систему... 2010-04-22
14:00:08 Ошибка размещения
https://theurl/j_security_check:
Время, отведенное для процесса входа в систему, было превышено. Если вы хотите продолжить, вы должны либо дважды щелкнуть назад и повторно щелкнуть запрошенную вами ссылку, либо закрыть и снова открыть браузер в строке lib/mypackage.pm 40

Это даже проблема с cookie?

Есть ли способ увеличить время входа в систему, даже если я захожу на сайт через браузер, мне кажется, что для входа в систему требуется от 60 до 90 секунд.

2 ответа

Решение

WWW:: Mechanize построен поверх LWP::UserAgent, поэтому вы можете использовать методы LWP::UserAgent. Время ожидания по умолчанию составляет 180 секунд, что уже очень долго, но вы можете изменить его на любое значение, которое вам нравится, используя timeout метод:

 $mech->timeout( $really_long_value );

Это время ожидания не общее время запроса, а время простоя в сокете, которое будет терпеть пользовательский агент. Если он не получает взаимодействия в течение этого времени, запрос должен завершиться неудачей.

Тем не менее, похоже, что сервер, вероятно, имеет проблемы, так как это занимает много времени, даже если вы делаете это вручную. Вы можете упомянуть это тому, кто управляет этим сайтом. Это сообщение об ошибке очень подозрительно. Без более подробной информации о сервере и т. Д. Очень сложно сказать вам, что происходит.

Что касается проблемы с cookie, просто посмотрите HTTP-разговор, когда вы попробуете его вручную. Делайте то, что делает ваш интерактивный браузер. Если он отправляет куки, сделайте это. Если он использует другую форму аутентификации, сделайте это и так далее. Они могли изменить больше, чем схема, когда они отключили порт 80.

Это старая статья, но я подумал, что вам может потребоваться убедиться, что поддержка SSL загружена, так как обычно она не включена по умолчанию.

use WWW::Mechanize;
require IO::Socket::SSL;

Кроме того, убедитесь, что все ваши URL начинаются с https. Я узнал об этом после 3 дней отладки.

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