WWW :: Mechanize и "HTTP :: Содержание сообщения должно быть байтами в ..." - PullRequest
1 голос
/ 03 апреля 2009

Я пишу простую программу, которая должна изменить некоторые данные на польском аукционе.

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

Пример страницы можно посмотреть здесь: http://depesz.com/various/new_item.php.html - это просто статическая копия такой страницы редактирования.

Соответствующая часть моего кода Perl:

$agent->form_number( 1 );
$agent->submit();
$agent->form_number( 1 );

my $q = $agent->current_form()->find_input( 'scheme_id' );
$agent->field('scheme_id', '1025');
# $agent->field('description', encode('utf-8', $agent->value("description")));
# $agent->field('location', encode('utf-8', $agent->value("location")));
# $agent->field('transport_shipment_description', encode('utf-8', $agent->value("transport_shipment_description")));
$agent->submit;
print $agent->response->decoded_content . "\n";

После первой отправки я получаю страницу, которую я показал. Затем я изменяю значение в поле circuit_id на 1025 и отправляю форму.

После этого я получаю:

HTTP::Message content must be bytes at /usr/local/share/perl/5.8.8/HTTP/Request/Common.pm line 91

Я пытался перекодировать значения в текстовых полях формы - отсюда строки agent-> field (... encode), но это не помогло.

В настоящий момент я понятия не имею, что на форме может привести к сбою WWW :: Mechanize таким образом, но я явно не могу исправить самостоятельно.

Есть ли способ отладить эту ситуацию? Или, может быть, я должен сделать что-то другое?

Ответы [ 2 ]

1 голос
/ 04 апреля 2009

Убедитесь, что ваши модули LWP и WWW-Mechanize полностью обновлены. LWP исправил ряд проблем с кодировкой в ​​конце 2008 года, если я правильно помню.

0 голосов
/ 16 июля 2012

У меня такая же проблема. Решил это с помощью: my $newcontent = encode('utf-8', $file); перед публикацией контента!

спасибо, микрофон

см. http://www.perlmonks.org/?node_id=647935

...