トップ «前の日記(2013/01/02 (水) ) 最新 次の日記(2013/01/04 (金) )» 編集 RSS feed

HsbtDiary


2013/01/03 (木) [長年日記]

[ruby][tDiary] 2.0.0 の net/http の変更点を追いかけていた

ruby trunk の r38546 以降だと tDiary の amazon.rb を使おうとすると tDiary が落ちてしまう現象が発生していてなんだろうと追いかけていた。

結論としては r38546 で変更した内容が以下のように副作用を起こしていることが原因ということがわかった。

  • Net::HTTP#get_response に URI のインスタンスを渡すとリクエスト時に host ヘッダを URI インスタンスの値で上書きするようになった
  • もともと host ヘッダはついていたようなんだけど、これは Net::HTTP を何らかの値で new した後で、違う URI でもリクエストをばしばし投げる時のためのものなんだろうか。何故上書きしているかはよくわからない。
  • この上書き時にポート番号を含めるようにしている。
  • ちなみに Net::HTTP.new の時はポート番号を含めていない。この辺がだいぶ気持ち悪い。
  • host ヘッダにポート番号がついていると webservices.amazon.co.jp などの ECS API が 403 を返す

@nahi さんに httpclient の中の似たような処理の部分を教えてもらったんだけど、amazon 以外のサービスでもポート番号を付けるとよろしくない動きになるサービスがあるみたい。へー。

ひとまず ruby 側でポート番号だけは付けなくてもよいのではとレポートしてみたけど、ruby で直らなかったら URI を渡さない下位互換の方法で逃げるか、もしくは別の http クライアント、まさに httpclient 等に乗り換えるか何かしないとダメかなあ。むむーん。