RubyのMechanizeでシリアルクッキー作る時にsave_asとloadでハマったのでcookie_jarごとシリアルにして食べました。
とあるサイトにMechanizeでログインする上で、何度もログインするのは良くないと思い、Cookieを使い回そうと試みたのですが、cookie_jarのloadとsave_asが上手く働いてくれなかったのでその場合の対応をメモします。
試したロジック
a = Mechanize.new a.cookie_jar.load("example.yaml") #yaml形式のcookieを読み込む if isLogin(a) then #ログイン出来ているかチェック puts "loginできてないですよ" login(a) #ログインする関数 a.cookie_jar.save_as("example.yaml") #cookieをyaml形式で保存 else puts "login OK!" end
よし。これで実行すると。。。
[user@localhost]$ ruby login.rb loginできてないですよ [user@localhost]$ ruby login.rb loginできてないですよ [user@localhost]$ ruby login.rb loginできてないですよ
....あれ?2回目はシリアルクッキーを食べて上手くいくはずなのになぜ??
じゃあジャーごと食べてしまおう。...(--;)
a = Mechanize.new yaml_text = File.read("example.yaml", :encoding => Encoding::UTF_8) a.cookie_jar = YAML.load(yaml_text) #a.cookie_jar.load("example.yaml") #yaml形式のcookieを読み込む if isLogin(a) then #ログイン出来ているかチェック puts "loginできてないですよ" login(a) #ログインする関数 File.write("example.yaml", a.cookie_jar.to_yaml) #a.cookie_jar.save_as("example.yaml") #cookieをyaml形式で保存 else puts "login OK!" end
loadメソッドとsave_asは利用せずに、cookie_jarをそのままシリアライズしました。 するとどうでしょう。2回目以降はログイン処理を通さずにCookieが上手く利用されてます!
[user@localhost]$ ruby login.rb loginできてないですよ [user@localhost]$ ruby login.rb login OK! [user@localhost]$ ruby login.rb login OK!