mechanize submit encode フォーム送信 エンコード・デコードツール、request header 確認ツール
mechanizeでフォーム送信すると期待されたエンコードで送信されない事がある。送信結果が文字化けしてしまう。
以下の条件に当てはまるウェブページで起こる。
- HTML 中に meta 要素の charset が存在しない
- レスポンスヘッダのContent-Typeにもcharsetがない
(参照『Mechanize::Util::CODE_DIC』 http://seesaawiki.jp/ruby_mechanize/d/Mechanize%3A%3AUtil)
特に淘宝,楽天,Yahooの管理画面で商品選択→削除登録の確認と言ったプロセスの場合、前回の商品選択画面のエンコードを仮定しているらしく、次の確認画面にエンコード指定が全くないケース、または直前のエンコードと違うエンコードが使用されているのにその記述が無いケースがままある。
この場合mechanizeはエンコード検索に失敗しMechanize::Page#encoding=nilを返して、次の内部プロセスのnokogiriがページのパースに失敗する。
そこで,エンコードがEUC-JPなら
agent.page.encoding='eucJP-MS'(Linux版Ruby1.9以降、win版ならeucJP-MS)
をページ取得後(get後)に実行。ところが、その後帰ってくるレスポンスが同様の状況であるのにもかかわらず、エンコードの再指定(同指定だが)を忘れてしまう。
大概の確認ページ/フォームはsubmitボタンが一個なので例えば、theform.button_with(value:'確認')の様なパースで‘確認’と言う文字の特定に失敗してもサブミットは実行できる。結局、確認ページでサブミット一発しかない場合もエンコードを指定した方が無難である。
Lエンコード・デコードフォーム
http://www.tagindex.com/cgi-lib/encode/url.cgi
PourBico Tracker
https://pdvel.com