自動化するのにPerlを検討
ある案件で、あるサイトのフォームへ手入力しているものを、自動化するという処理を構築することに。
当初、メールでデータを流しこみ、Perlで解析し、POSTする方法を検討。
ところが、何度もページを遷移したあとで入力フォームにたどり着くのだけれど、SSLなページが、LWPではどうも上手くいかない。
まあWebブラウザを作るのと同じような内容になってしまうので、面倒すぎる。
どうもHiddenでデータ渡しているし、セッションを使っているのでCookieまわりの処理とかがダメっぽい。ひょっとするとReferer等も見ている感じ
ふ〜む、そうだ! WWW::Mechanizeを使おうと考えた。データを作るのに手入力はやっていられないので、HTTP::RecorderでProxyさせて、記録することに。
でもSSL通すと記録してくれない…。
はぁ…。
テキストブラウザLynxが使えないレベル
ならば、いっその事テキストブラウザを制御する方向で検討。
メールで受けて、解析し、テキストブラウザをスクリプトで動作させる。
スクリプトには解析した内容から、フォームに入力させるようにPerlで生成する。
よし。これならOKそう。
まずは手元のUbuntu上で簡単な動作確認を行う。
Lynxには、マニュアルに載っていないコマンドラインオプションがあって、
$ lynx -cmd_log ファイル名
とすると、操作を記録してくれる。
この記録されたファイルを編集してやれば思い通りに動かせるはず。
実行するには、
$ lynx -cmd_script ファイル名
でOKだ。
実際には、
lynx -cmd_script log.txt -accept_all_cookies URL
なんて指示してやる。
どうやら、日本語もちょっとうまく処理してやるとフォームに流し込めることが判明。
SSLもモジュールさえ入っていれば動作するのを確認。
本番環境の調査
お客さんの借りているのが「さくらのレンタルサーバ スタンダード」。契約内容からSSHがOK。Lynxも入っている。PerlもOK。
ここまでは、事前の調査で分かっているので、最低限の動作確認をする。

SSHでログインして、Lynxを手動で起動して、ページを叩いてみる。(ちなみにwww.google.co.jp)
オプションで、コードをEUC-JPにしても、Shift-JISにしてもUTF-8にしても、化けまくる…。
ぐぐってみて、.lynxrcに何を書いても正しく表示されない。
まあ、それなら、それで文字コードさえフォームに流し込めれば、化けようがなにしようが…。と思い、httpsも試す。
「Alert!: This client does not contain support for HTTPS URLs.」
とな…。
なんてこった。lynxは入っているがSSLのモジュールは入っていない。
ここで詰みました。
さくらサーバでは、実行不可ということが判明。
これをさくら側に要望して、すぐ入れてくれるとも思えないし…。
別の方法を探さなければなりませぬ…。
コメント
コメントを投稿
励みになりますので、簡単で良いので一言くださいませ。