2008/08/29(金)2008/08/29
WWW::Mechanizeのリダイレクト
adiaryWriterで-WオプションをつけてCookieを使わずにログインすると、以下の警告が出る。warning: net/http: warning: Content-Type did not set; using application/x-www-form-urlencoded warning: net/http: warning: Content-Type did not set; using application/x-www-form-urlencoded「Content-Typeが空だったので、application/x-www-form-urlencodedを使います」。ではソースのどこで警告が出てるのかを調べると、以下のsubmitが原因であることが判明。
redirect_page = @agent.submit(login_form)submitメソッドを使う前に、Content-Typeをセットすりゃ良いんだな、と単純に思ったのだが、どこにもそれらしきメソッドが見つからない。
途方に暮れていた所、「Mechanizeが原因じゃないのか?」と考え、警告を出してるnet/httpでログインしてみるかと思いつき、下記のようなスクリプトを書いてログインしたのだが、
require 'rubygems' require 'net/http' http = Net::HTTP.new('localhost',80) http.post('/adiary/adiary.fcgi/','action=login&id=hoge&pass=xxxxx')これでも警告が出た。
どう対応すれば良いか解らず四苦八苦していたところ、ようやくMechanizeのリンク先の自動追尾が原因じゃないかという考えに致ったので、リダイレクトをOFFにしてみたら、案の定警告は出なくなった。
そこで、adiaryWriterのソースを以下のように改変したわけだが、
@agent.redirect_ok = false redirect_page = @agent.submit(login_form) @agent.redirect_ok = true何だか応急処置っぽくて頼りない。もっと良い方法は無いものか。と、思ってたらMechanizeが0.7.8にバージョンアップされているのに気づき、早速インストールして適当なスクリプト書いて実行してみると、警告が出なくなった。
なんだったんだ一体。