2013-05-22 3 views
4

사용자의 요청에 따라 Mechanize를 사용하여 암호로 보호 된 웹 사이트를 긁습니다. 사이트에 로그인하고 후속 Mechanize 요청에 의해 다시 사용되는 데이터베이스에 쿠키를 저장하는 Rake 작업을 실행하여 로그인 및 검색 기능을 분리하려고합니다.Mechanize cookie_jar 세션 토큰을 저장하지 않음

내 문제는 cookie_jar.save 메서드가 세션 쿠키/토큰을 쿠키 파일에 저장하지 않는다는 것입니다. 다음은이 보여주는 간단한 예제 :

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"=>{"/"=>{}, "/login/"=>{"Account"=>Account=my_account_number}}, "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}, "/login/"=>{"Account"=>Account=my_account_number}}, "evr.my-secure-website.com"=>{"/APBDBQ"=>{"JSESSIONID"=>JSESSIONID=A74D230DEAFF50098557FBE76DD2E0C5}}}> 

는 그리고 이것은처럼 내 저장된 쿠키 파일이 모습입니다 : 당신은 콘솔 출력의 세션 토큰 (JSESSIONID)를 볼 수 있습니다

--- 
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: {} 

하지만 실종 로컬 쿠키 파일에서. 내 질문은, 어떻게 내가 Mechanize.cookie_jar.save_as도 세션 데이터를 저장합니까?

+0

그럼 뭐가 문제입니까? – pguardiario

+0

질문을 명확하게하기 위해 업데이트되었습니다. –

+0

세션 쿠키가 저장되지 않아야합니다. 그것을 바꾸려면 Mechanize.cookie_jar를 패치하고 싶습니까? – pguardiario

답변

7

기계화 버전 2.6.0 기준

agent1.cookie_jar.save_as 'cookies', :session => true, :format => :yaml 

P.S.을 다음 cookie_jar.save_as 방법은 :session 옵션의 전달뿐만 아니라 세션 쿠키를 저장할 수 있도록 할 수 있습니다 이 기능이 부족한 v2.5.1을 사용하고있었습니다.

+0

알아두면 좋습니다! – pguardiario

관련 문제