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にバージョンアップされているのに気づき、早速インストールして適当なスクリプト書いて実行してみると、警告が出なくなった。

 なんだったんだ一体。