Ruby Mechanize wiki (ja) - Mechanize::Cookie

Mechanize::Cookie


サーバからの Set-Cookie: ヘッダに記述されたクッキー、または HTML の meta 要素に書かれたクッキーをパースし保管するクラスです。
クッキーデータのクラスであり、ユーザーが使用することはまずないでしょう。URL に関連付けられたクッキーの管理自体は Mechanize::CookieJar クラス(と Mechanize 本体)が自動で行っています。
Ruby 標準の WEBrick::Cookie を継承しています。オブジェクト構成自体は WEBrick::Cookie なのですが、パース動作を若干変更してあります。手動でクッキーを作成したいような場合は必ず Mechanize::Cookie.parse を使用して Mechanize::Cookie オブジェクトを作り、Mechanize::CookieJar#add で登録してください。


parse(uri, str, log = Mechanize.log){|cookie| required_block}

HTTP ヘッダなどに記載されるクッキー文字列 str を uri に関連したクッキーとみなしてパースし、Mechanize::Cookie オブジェクトに変換してブロックへ渡します。
メソッドの返り値は Cookie オブジェクトではないので、必ずブロックを使用するようにしてください。
uri = URI.parse('http://www.example.com/')
agent = Mechanize::new

str = 'COOKIETEST=var1=value1; expires=Tue, 7-Apr-2012 00:00:00 GMT;'
Mechanize::Cookie.parse(uri, str){|c| agent.cookie_jar.add(uri, c)}
pp agent.cookie_jar.jar # 確認
# ドメインが一致するので COOKIETEST のクッキーが get 時に実際に送られる
agent.get(uri)
第 1引数 uri はクッキーが属するべき URL を Ruby 標準の URI オブジェクトで指定します。
第 2引数 str は Set-Cookie: ヘッダの値に相当するクッキー文字列です。
第 3引数 log はログ出力オブジェクトです。Mechanize.log が有効な場合は、パースしたクッキー内容や有効期限などをパースできなかったときの警告などを書き出します。

動作の方向性的には WEBrick::parse_set_cookies(str) ですが、
  • パースできないクッキー要素があった場合は agent.log に警告が出る
  • 空のクッキーが連続セミコロン ;; で表現されててもパースする
  • クッキーの domain 部の先頭に ./ がついていた場合は事前に除去される
  • クッキーの expire 部の文字列は事前に Time.parse される
  • クッキーの path 部が空だった場合、uri.path から計算される(uri.path.to_s.sub(/[^\/]*$/, ''))
  • クッキーの domain 部が空だった場合、uri.host が使われる

という違いがあります。

クッキーとして期限切れである場合に true を返します。
有効期限が未来か、現在の時刻と同じである場合に false を返します。有効期限(expires)が設定されていなかった場合も false を返します。

オブジェクトを name=value の単純な文字列で返します。