WWW :: Mechanize和“HTTP ::消息内容必须是......的字节”

时间:2009-04-03 19:20:54

标签: perl www-mechanize

我正在编写简单的程序,必须更改波兰拍卖网站上的一些数据。

其中一个步骤涉及加载编辑页面,更改一个值并提交。

可以在此处查看示例页面: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";

首次提交后,我会看到我展示的页面。然后我将scheme_id字段中的值更改为1025,并提交表单。

之后我得到:

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

我尝试在表单上的文本字段上重新编码值 - 因此代理 - >>字段(...编码)行,但它没有帮助。

目前我不知道表单上的内容可以使WWW :: Mechanize以这种方式失败,但我显然无法自行修复。

有没有办法调试这种情况?或许我应该采取不同的做法?

2 个答案:

答案 0 :(得分:1)

确保您的LWP和WWW-Mechanize模块完全是最新的。如果我没记错的话,LWP在2008年底解决了许多编码问题。

答案 1 :(得分:0)

我有同样的问题。 解决了它: my $newcontent = encode('utf-8', $file); 在发布内容之前!

感谢, 麦克

请参阅http://www.perlmonks.org/?node_id=647935