ruby – Mechanize cookie_jar不保存会话令牌
发布时间:2020-12-17 02:45:23 所属栏目:百科 来源:网络整理
导读:我正在使用Mechanize根据用户的要求刮取受密码保护的网站.我正在尝试通过运行登录到站点的Rake任务来解除登录和搜索功能,并将cookie保存到数据库中,然后由后续的Mechanize请求重用. 我的问题是cookie_jar.save方法不会将会话cookie /令牌保存到cookie文件中.
我正在使用Mechanize根据用户的要求刮取受密码保护的网站.我正在尝试通过运行登录到站点的Rake任务来解除登录和搜索功能,并将cookie保存到数据库中,然后由后续的Mechanize请求重用.
我的问题是cookie_jar.save方法不会将会话cookie /令牌保存到cookie文件中.这是一个演示这个的简单示例: require 'mechanize' # Setup Mechanize agents agent1 = Mechanize.new agent2 = Mechanize.new # Fetch page and save cookies to local file agent1.get ('http://www.my-secure-website.com') agent1.post('http://www.my-secure-website.com/login',{ 'user[login]' => 'my_login','user[password]' => 'my_password','submit' => 'Login' }) # Verify and save cookies agent1.cookie_jar.save_as 'cookies' p agent1.cookie_jar # #<Mechanize::CookieJar:0x8cf60b8 @jar={"www.my-secure-website.com"=>{"/"=>{"JSESSIONID"=>JSESSIONID=1NqLRc4dm0Qp5465N82Zwz4N0yXxy5jP1pXpyKp9jG8ssX2nMp5q!-334818122},"/login/"=>{"Account"=>Account=my_account_number}},"evr.my-secure-website.com"=>{"/APBDBQ"=>{"JSESSIONID"=>JSESSIONID=A74D230DEAFF50098557FBE76DD2E0C5}}} ######################################################## # Now let's load cookies into the second Mechanize agent # Version 1 - This works only partially. Session cookies are missing: agent2.cookie_jar.load 'cookies' p agent2.cookies # [ # [0] Account=my_account_number # ] p agent2.cookie_jar # #<Mechanize::CookieJar:0x914c658 @jar={"www.my-secure-website.com"=>{"/"=>{},"evr.my-secure-website.com"=>{"/APBDBQ"=>{}}}> # Version 2 - This works,but cannot be saved into file/db! agent2.cookie_jar = agent1.cookie_jar p agent2.cookies # [ # [0] JSESSIONID=1NqLRc4dm0Qp5465N82Zwz4N0yXxy5jP1pXpyKp9jG8ssX2nMp5q!-334818122,# [1] Account=my_account_number,# [2] JSESSIONID=A74D230DEAFF50098557FBE76DD2E0C5 # ] p agent2.cookie_jar # #<Mechanize::CookieJar:0x8cf60b8 @jar={"www.my-secure-website.com"=>{"/"=>{"JSESSIONID"=>JSESSIONID=1NqLRc4dm0Qp5465N82Zwz4N0yXxy5jP1pXpyKp9jG8ssX2nMp5q!-334818122},"evr.my-secure-website.com"=>{"/APBDBQ"=>{"JSESSIONID"=>JSESSIONID=A74D230DEAFF50098557FBE76DD2E0C5}}}> 这就是我保存的cookie文件的样子: --- www.my-secure-website.com: /: {} /login/: Account: !ruby/object:Mechanize::Cookie version: 0 port: discard: comment_url: expires: Thu,22 May 2014 07:48:46 GMT max_age: comment: secure: true path: /login/ domain: www.my-secure-website.com accessed_at: 2013-05-22 00:48:47.227628764 -07:00 created_at: 2013-05-22 00:48:47.227628764 -07:00 name: Account value: S4633 for_domain: false domain_name: !ruby/object:DomainName ipaddr: hostname: www.my-secure-website.com uri_host: www.my-secure-website.com tld: com canonical_tld_p: true domain: my-secure-website.com session: false evr.my-secure-website.com: /APBDBQ: {} 您可以在控制台输出中看到会话令牌(JSESSIONID),但它在本地cookie文件中缺失.我的问题是,我如何使Mechanize.cookie_jar.save_as也保存会话数据? 解决方法
从Mechanize版本2.6.0开始. cookie_jar.save_as方法允许传递:session选项以启用保存会话cookie:
agent1.cookie_jar.save_as 'cookies',:session => true,:format => :yaml 附:我使用的是缺乏此功能的v2.5.1. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |