LINUX.ORG.RU

Perl WWW::Mechanize submit_form()

 ,


0

2

Есть перловый скрипт, который заходит на страницу и пытается сделать сабмит формы. Локально скрипт прекрасно работает. Когда заливаю на удаленный сервер, то выдает ошибку: «There is no form with ID „login_form“.
Делаю print $mech->content(), чтобы вывести HTML-код страницы и вижу там <form id=„login_form“...>.
Делаю print Dumper($mech->forms()) : на локальной машине выводит список форм, на удаленной - ничего не выводит.
Почему так может быть? И там, и там стучусь на одну и ту же страницу, вывожу HTML-код страницы - и вижу эту форму, но Mechanize ее почему-то не находит, если скрипт запускается на удаленной машине...

PS: Пробовал делать и $mech->submit_form(form_id => 'login_form', fields => $fields); и $mech->submit_form(form_number => 1, fields => $fields); - не находит форму.

★★★★★

Последнее исправление: kovrik (всего исправлений: 1)

может в куках дело?
<code=Perl>
my $mech = WWW::Mechanize->new();
$mech->cookie_jar(HTTP::Cookies->new());
$mech->get($url);
$mech->form_id('login_form');
$mech->field(User => $username);
$mech->field(Pass => $password);
$mech->click();
</code>

bass ★★★★★
()
Ответ на: комментарий от bass

Проверил на еще 1 удаленном сервере. Там все работает.
Посмотрел на diff между возвращаемыми HTML-страницами: там, где работает, стоит <?xml version=«1.0» encoding=«utf-8»?>, а где не работает - просто <?xml version=«1.0»?>. Я так понимаю, что возвращаемый код зависит от Request'а, который был отправлен серверу. Как узнать, какие запросы отправляет Mechanize? Как заставить его всегда просить все в UTF-8? Откуда он берет такие значения флагов?

kovrik ★★★★★
() автор топика
Ответ на: комментарий от kovrik

mech-dump --headers на рабочем сервере выдает «Content-Type: application/xhtml+xml; charset=utf-8», а на том, где не работает - ругается "https://.... returns type «application/xhtml+xml», not «text/html»"

kovrik ★★★★★
() автор топика
Ответ на: комментарий от kovrik

Как заставить его всегда просить

$mech->add_header( Encoding =>'UTF-8' bla-bla

bass ★★★★★
()
Ответ на: комментарий от kovrik

бывает ;)
на такой случай надо проверять другими инструментами, например curl, что-то типа:
curl -s --cookie cookies.txt --cookie-jar cookies.txt --data «login_form[login]=xxx&login_form[password]=xxx&submit=commit» https://bla-bla

bass ★★★★★
()

Вся идеология пёрла ведёт к наплевательскому отношению к качеству кода. Встречал множество кривых перловых библиотек с cpan. Стоит ли использовать пёрл в 21 веке? Лучше оставить его в прошлом тысячелетии.

psp13
()
Ответ на: комментарий от psp13

Для поставленной задачи ничего лучше не нашел. Перл - он и достаточно быстрый, и удобный.

kovrik ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.