読者です 読者をやめる 読者になる 読者になる

こしごぇ(B)

旧:http://d.hatena.ne.jp/koshigoeb/

Mechanize で Cookie を手動でセットする

Mechanize::Cookie.new のパラメータ指定でミスっていたので自戒のメモ。

require 'rubygems'
require 'mechanize'
require 'logger'

agent = Mechanize.new do |agent|
  agent.log = Logger.new($stdout)
end

[
  'http://www.google.com',
  'http://www.google.co.jp',
].each do |url|
  uri = URI.parse(url)
  cookie_params = { :domain => uri.host, :expires => Time.now + 86400, :path => '/' }
  cookie = Mechanize::Cookie.new('COOKIE_NAME', uri.host, cookie_params)
  agent.cookie_jar.add uri, cookie
end

agent.get 'http://www.google.com'

# $ ruby test.rb | grep cookie | grep request
# D, [2012-08-06T18:06:44.236636 #42887] DEBUG -- : request-header: cookie => COOKIE_NAME=www.google.com
# D, [2012-08-06T18:06:44.323225 #42887] DEBUG -- : request-header: cookie => COOKIE_NAME=www.google.co.jp
  • Mechanize::Cookieインスタンスを Mechanize インスタンスの .cookie_jar.add で追加したら良い
  • Mechanize::Cookieインスタンスは、Mechanize::Cookie.parse でもいいし、Mechanize::Cookie.new でも良い
    • どこかから持ってきた Set-cookie ヘッダの内容を使うなら parse が楽だと思う
    • 自分で組み立てるなら、日付フォーマットを考えなくて良い分 new が楽な気がする
      • パラメータの指定を忘れると Cookie を送れなくなるという落とし穴がある
        • domain, expires, path を指定しておけば大丈夫なはず