2009-04-03 4 views
1

ポーランドのオークションサイトでいくつかのデータを変更する必要がある簡単なプログラムを書いています。WWW :: Mechanizeと "HTTP ::メッセージの内容はバイトでなければなりません"

手順の1つに、編集ページの読み込み、値の変更、および送信があります。

サンプルページはこちらからご覧ください: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をこのような方法で失敗させることはできませんが、自分で解決することはできません。

この状況をデバッグする方法はありますか?あるいは多分何かをするべきでしょうか?

答えて

1

LWPおよびWWW-Mechanizeモジュールが最新の状態であることを確認してください。 LWPは正しくリコールすれば、2008年後半にいくつかのエンコーディングの問題を修正しました。

+0

を参照してください。注:私はこの問題を完全に解決するかわからないんだけど、私はチェックして他に何かわかりません。私は、過去にそのエラーに遭遇したときにエンコーディングの問題であることを知っています。それが役に立てば幸い。 – Frakkle

+0

は、残念ながら、両方の最新である: => modver LWP バージョン5.825 => modver WWW :: バージョンを機械1.54 –

+0

は、あなたが再び更新しようとしたことがありますか? WWW :: Mechanize 1.56がエンコーディングを処理する方法を変更しました: "しばらくの間、MechはHTTP :: Response :: Encodingを使用して、受信したページの適切なエンコーディングを にしました。 LWP :: UserAgent作業をして、もはや HTTP :: Response :: Encodingを必要としません。 – cjm

関連する問題