WWW::MechanizeでShift-JISとかのフォームを送信する方法
WWW::Mechanizeはいろんなモジュールがベースになってて、コードを追うのが大変。LWP::UserAgentとかそれ以前の時代を知っていれば、どのモジュールが何を持ってるか分かっていいんだろうけど、いきなりWWW::Mechanizeから入ってしまうと厳しいっすね。まぁ、分からなけりゃその分コード読めばいい。
で、ふつうに$mech->submit_formで日本語を送ると、UTF-8でencodeした文字列になってしまって、SJISとかEUCのページを操作すると文字化けします。コード拾い読みして、たどり着いた解決方法がこれ。
$mech->get($target_url); my $form = $mech->form_number(1); $form->accept_charset('shiftjis'); my $req = $form->make_request; $mech->request($req);
$mech->form_numberでHTML::Formのオブジェクトを取ってきて、accept_charsetを指定。あとは、$mech->submitがやってることをそのまま手動で実行。
これだとフォーム取得する度にaccept_charsetを指定する必要があって、あまりおいしくないんだけど、今のところここまで。もうちょっとうまいやり方はないもんかね。HTML::Form->parseしてる所を見付けてオプション投げるのがよさそうだけど、どこでやってんだろ。