WWW::Mechanize 和“HTTP::消息内容必须是字节位于...”
我正在编写一个简单的程序,它必须更改波兰拍卖网站上的一些数据。
步骤之一涉及加载编辑页面、更改一个值并提交。
示例页面可以在这里查看: 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 以这种方式失败,但我显然无法自行修复。
有什么办法可以调试这种情况吗? 或者也许我应该做一些不同的事情?
I'm writing simple program which has to change some data on Polish auction site.
One of the steps involves loading edit page, changing one value, and submitting it.
Sample page can be viewed here: http://depesz.com/various/new_item.php.html - this is just static copy of such edit page.
Relevant part of my perl code:
$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";
After first submit I get the page I showed. Then I change value in scheme_id field to 1025, and submit the form.
Afterward I get:
HTTP::Message content must be bytes at /usr/local/share/perl/5.8.8/HTTP/Request/Common.pm line 91
I tried to recode values on text fields on the form - hence the agent->field(... encode) lines, but it didn't help.
At the moment I have no idea what on the form can make WWW::Mechanize fail in such way, but I clearly cannot fix in on my own.
Is there any way to debug this situation? Or perhaps I should do something differently?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
确保您的 LWP 和 WWW-Mechanize 模块完全是最新的。 如果我没记错的话,LWP 在 2008 年底修复了一些编码问题。
Make sure your LWP and WWW-Mechanize modules are fully up to date. LWP fixed a number of encoding problems in late 2008, if I recall correctly.
我也有同样的问题。
解决了它:
我的 $newcontent = 编码('utf-8', $file);
在发布内容之前!
谢谢,
迈克
参见http://www.perlmonks.org/?node_id=647935
I have the same problem.
Solved it with :
my $newcontent = encode('utf-8', $file);
before posting the content!
thanks,
mike
see http://www.perlmonks.org/?node_id=647935