Ruby,open-uri,cookieを指定して開く,cookieを取得する

ヘッダの指定法はリファレンスマニュアルに書いてあるけど見落としてた。

cookieを指定したopen

拡張されたopenは第二引数にオプションをハッシュで渡すことができる。文字列をキーにするとHTTPヘッダとして解釈される。

require 'open-uri'
cookie={ :param1 => 'hoge', :param2 => 'hage' }
cookie_str=cookie.map{|x|x.join('=')}.join('; ') # 何が来るかわかんないときはちゃんとエスケープしましょう
open(THE_URI, { 'Cookie' => cookie_str }) {|f| ... }

cookieを取得する

openで返ってきたファイルオブジェクトのmetaメソッドからヘッダ情報を取り出せる。
Set-Cookieフィールドって複数指定できるようなんだがどうするんだろ、と思ったらカンマでjoinされる模様……。まじめにパースするのはあきらめた。

cookie={}
open(THE_URI){|f|f.meta}['set-cookie'].scan(/([a-zA-Z_-]+)=([^;\s]+);/){ # これかなりてきとうなのでコピペしないほうがいいですよ
  cookie[$1]=$2
}