2010-03-27 2 views
3

Я автоматически пытается входа в веб-сайт, используя Perl с WWW :: Механизируйте.WWW :: Mechanize Perl Войти работает только после перезапуска

Что я делаю:

$bot = WWW::Mechanize->new(); 
$bot->cookie_jar(
     HTTP::Cookies->new(
      file   => "cookies.txt", 
      autosave  => 1, 
      ignore_discard => 1, 
     ) 
); 

$response = $bot->get('http://blah.foo/login'); 

$bot->form_number(1); 

$bot->field(usern => 'user'); 
$bot->field(pass => 'pass'); 
$response =$bot->click(); 

print $response->content(); 

$response = $bot->get('http://blah.foo'); 

print $response->content(); 

Логина работает, но когда я загрузить страницу он говорит мне, что я не связан.

Вы видите, что я хранил файлы cookie в файле. Теперь, если я перезапущу скрипт без части входа, он говорит, что я подключен ...

Кто-нибудь понимает это странное поведение?

Редактировать: На самом деле я заметил, что проблема происходит тоже с некоторых веб-браузеров на определенной платформе. На странице написано: «Не вошел». Однако достаточно перезагрузить страницу для входа.

В скрипте я попытался сделать двойной доступ, но он не работает лучше. Единственный способ - запустить его дважды.

Он работал с curl, когда я сделал последний запрос дважды.

+0

О, так это ТВОЙ бот, который публикует все эти вопросы на SO! :) – DVK

+0

Имеется ли эта проблема с ЛЮБОЙ веб-сайтом или только с определенной страницей входа? Не могли бы вы привести пример общедоступной страницы в Интернете, где это поведение проявляется, чтобы мы могли попробовать и воспроизвести? – DVK

+0

См. Мое дополнение ниже. К сожалению, публичная страница недоступна, извините. – Klaus

ответ

2

Некоторые веб-сайты, которые я видел, не устанавливают или обрабатывают свои файлы cookie cookie правильно на каждой странице, поэтому они терпят неудачу, если вы получаете доступ к своим страницам в «неожиданном» порядке. Например, страница входа или страница входа в систему или какая-либо страница всплывающего содержимого может ожидать, что файл cookie сеанса уже установлен обычной страницей с сайта.

Это звучит как ваша проблема, потому что он работает во второй раз, когда cookie уже установлен, когда вы извлекаете страницу.

Я работал вокруг такого рода проблем путем имитации более типичную сессионный активность пользователей браузера в моем сценарии, запрашивая некоторые «нормальные» страницы, прежде чем идти к фактической авторизации части:

$www->get('http://www.example.com');   # Homepage 
$www->get('http://www.example.com/account'); # Authenticated section front page 
# Now everything is set up, proceed with account login... 
+0

Большое вам спасибо! Сначала я открыл защищенную страницу и перенаправил меня на страницу входа. Вместо этого я теперь открываю домашнюю страницу, затем защищенную страницу, и она отлично работает! – Klaus

Смежные вопросы