WWW::Mechanize.newでヘッダ情報を指定する。

久々にダーツを投げていたらダーツライブグラフが更新されていないことに気づきました。
どんだけ最近投げていないかよくわかりますね、汗


んで、グラフ更新バッチのログを見てみたら6月1日からFailしている。
しかもWWW::Mechanizeの中でHTMLに失敗している。

んで追っていったら今まで日本語で返却されていたページが英語で返却されるようになっていた。
確かにWWW::Mechanizeはデフォルトで以下のようなHTTPヘッダを送っているので英語で帰ってきてもおかしくない

# HeaderResolver.rb, L26, ver 0.9.2
    request['Accept-Encoding'] = 'gzip,identity'
    request['Accept-Language'] = 'en-us,en;q=0.5'
    host = "#{uri.host}#{[80, 443].include?(uri.port.to_i) ? '' : ':' + uri.port.to_s}"
    request['Host'] = host
    request['Accept-Charset'] = 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'

なので今までどおり動くようにJaを送ってあげるようにpre_connect_hooksを使って修正。

agent = WWW::Mechanize.new
header_modifier = Proc.new{|params| params[:request]['accept-language'] = 'ja'}
agent.pre_connect_hooks << header_modifier

これで今までどおり日本語でページが返ってくるのでバッチが正常稼動するようになった。


つまり、6/1からはてながaccept-languageを解釈するようになったってことか、
もしくは日本語ページしか用意されていなかったログイン部分等に英語ページができたのか、
丁度6/1からってのもあるし恐らく仕様変更でしょう。

※ダーツはグラフ描画ぶぶんがこけていたけど情報取得はできていたのでデータはLostしてなくて良かった。