ポーランドのオークションサイトでいくつかのデータを変更する必要がある簡単なプログラムを書いています。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をこのような方法で失敗させることはできませんが、自分で解決することはできません。
この状況をデバッグする方法はありますか?あるいは多分何かをするべきでしょうか?
を参照してください。注:私はこの問題を完全に解決するかわからないんだけど、私はチェックして他に何かわかりません。私は、過去にそのエラーに遭遇したときにエンコーディングの問題であることを知っています。それが役に立てば幸い。 – Frakkle
は、残念ながら、両方の最新である: => modver LWP バージョン5.825 => modver WWW :: バージョンを機械1.54 –
は、あなたが再び更新しようとしたことがありますか? WWW :: Mechanize 1.56がエンコーディングを処理する方法を変更しました: "しばらくの間、MechはHTTP :: Response :: Encodingを使用して、受信したページの適切なエンコーディングを にしました。 LWP :: UserAgent作業をして、もはや HTTP :: Response :: Encodingを必要としません。 – cjm