Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > HTML::Form выдаёт ошибку


Автор: Anarki 25.5.2006, 14:44
Код

my $response = $ua->get($url);
if ($response->is_success) { # первая страница с формой
        my $rv1 = parseform(\$response);
...

sub parseform {
    my $response = ${$_[0]};
        my @forms = HTML::Form->parse( $response );
...

Когда обрабатываю некоторые страницы, то выдаёт такое.
Код

No 'doc' or 'file' given to parse from at /usr/local/lib/perl5/site_perl/5.8.8/HTML/Form.pm line 117

Что это? отчего возникает, из-за кривости HTML документа?  

Автор: sharq 25.5.2006, 19:36
Anarki, в общем можешь сам по модулям проследить, что происходит. 
Там завязано еще несколько модулей.

Такое ощущение, что $response подводит тебя, а именно метод $response->decoded_content(ref => 1). 
Обычно, кроме is_success следует проверять $responce->content на существование, т.к. документ может существовать, но быть пустым.

Привиди пример конкретной страницы, а-то гадать тяжело smile

И зачеи ты в свою функцию передаешь ссылку, а затем ее разыменовываешь, это лишняя операция.

 smile 


 

Автор: Anarki 25.5.2006, 21:20
Цитата

И зачеи ты в свою функцию передаешь ссылку, а затем ее разыменовываешь, это лишняя операция.

Я вначале подумал, может из-за этого и решил по ссылке передать 

Автор: rcdimon 25.5.2006, 23:24
Гы.. Вот кому-то делать нечего. Не проще ли формы ручками создавать в HTML файле... никаких HTML модулей никогда не использовал и не буду 

Автор: Anarki 26.5.2006, 11:28
Цитата(rcdimon @  25.5.2006,  23:24 Найти цитируемый пост)
Гы.. Вот кому-то делать нечего. Не проще ли формы ручками создавать в HTML файле... никаких HTML модулей никогда не использовал и не буду 

Это парсер форм

Добавлено @ 11:33 
Цитата(sharq @  25.5.2006,  19:36 Найти цитируемый пост)
Привиди пример конкретной страницы, а-то гадать тяжело 

http://ceserver.no-ip.org/
Хоть там и нет форм, но ошибку он выдает такую( Со многими другими страницами, где тоже нет форм, никаких ошибок модуль не выдает обычно) 

Автор: sharq 26.5.2006, 12:21
Anarki, ну так и есть, $response->decoded_content - возвращает undef, из-за этого и возникает ошибка. 

В общем смотри
Код

if ($response->is_success && $response->decoded_content) { # т.е. чтобы скрипт корректно отрабатывал
    my @forms = HTML::Form->parse($response);
}


или

Код

if ($response->is_success) {
    my @forms = HTML::Form->parse($response->content, $response->base); # передавать содержимое страницы, тогда будет тип file, а не doc и корректно будет обрабатываться
}


 smile   

Автор: Anarki 26.5.2006, 12:42
Да, так заработало, спасибо.
В документации не нашел метод decoded_content();
 

Автор: sharq 26.5.2006, 17:32
Anarki, метод decoded_content находится не в HTML::Form, этот метод наследуется, определен он HTTP::Message.

Советую посмотреть исходный код модулей. 

 smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)