2011-08-12 3 views
14

Ruby 버전의 Mechanize를 사용하여 이동하지 않는 티켓 관리 시스템에서 내 고용주의 티켓을 추출하는 것은 API를 제공하지 않습니다.Mechanize 요청 간의 쿠키 유지

문제는 기계화는 아래의 post 전화와 get 통화 사이의 쿠키를 유지하지 않는 것입니다 :

require 'rubygems' 
require 'nokogiri' 
require 'mechanize' 

@agent = Mechanize.new 

page = @agent.post('http://<url>.com/user_session', { 
              'authenticity_token' => '<token>', 
              'user_session[login]' => '<login>', 
              'user_session[password]' => '<password>', 
              'user_session[remember_me]' => '0', 
              'commit' => 'Login' 
}) 

page = @agent.get 'http://<url>.com/<organization>/<repo-name>/tickets/1' 
puts page.title 

user_session가있는 사이트의 로그인 페이지 포스트에 URL이고, 나는했습니다 이것이 실제로 로그인하는 것을 확인했습니다. 그러나 get 전화에서 반환되는 페이지는 '죄송합니다, 로그인하지 않았습니다!'입니다. 페이지.

post 콜에서 돌아 오는 페이지에 click 보내는 링크가 있지만 사실 JavaScript가 필요한 곳으로 이동할 수 없다는 것을 확인했습니다. 물론 동일한 로그인으로 브라우저에서 성공적으로 수행했습니다.

내가 뭘 잘못하고 있니?

답변

12

좋아요,이게 도움이 될 수 있습니다 - 먼저 어떤 기계 버전을 사용하고 있습니까? 이 문제가 요청 사이에 기계화로 쿠키를 덮어 쓰거나 청소했기 때문에 또는 쿠키가 잘못되었거나 처음 설정되지 않았기 때문에 식별해야합니다. 두 요청 사이에 puts @agent.cookie_jar.jar을 추가하여 저장된 내용을 확인할 수 있습니다.

덮어 쓰기 문제가있는 경우 첫 번째 요청에서 쿠키를 수집하여 두 번째 요청에 적용하여 문제를 해결할 수 있습니다. 이 작업을 수행하는 방법에는 여러 가지가 있습니다

한 가지 방법은 바로 다시 그러나 .add 방법

를 사용하여 단지 각 쿠키를 통과 한 후 temp_jar = agent.cookie_jar.jar을하고 그것을 추가하는 것입니다은 - 가장 쉬운 방법은 단지를 설치하는 것입니다 당신이 매우 간단하게 그것을 할 수 있기 때문에 mechanize (많은 수정)의 최신 2.1 사전 릴리스.

require 'rubygems' 
require 'nokogiri' 
require 'mechanize' 

@agent = Mechanize.new 

page = @agent.post('http://<url>.com/user_session', { 
             'authenticity_token' => '<token>', 
             'user_session[login]' => '<login>', 
             'user_session[password]' => '<password>', 
             'user_session[remember_me]' => '0', 
             'commit' => 'Login' 
}) 
temp_jar = @agent.cookie_jar 
#Do whatever you need an use the cookies again in a new session after that 
@agent = Mechanize.new 
@agent.cookie_jar = temp_jar 

page = @agent.get 'http://<url>.com/<organization>/<repo-name>/tickets/1' 
puts page.title 

이 BTW 문서가이 꽤 여기 http://mechanize.rubyforge.org/index.html

+0

입니다 다음과 같이 은 간단하게 할 수있는하는 gem install mechanize --pre을 최신을 설치하고이 후 gem uninstall mechanize 'some_version'을 기계화의 이전 버전을 제거해야합니다하려면 나쁜, 왜 새로운 기계화 인스턴스가 필요합니까? –

+0

@DitmarWendt 이것은 로그인 포스트가 실행 된 후 이전에 얻은 쿠키를 재사용하는 방법에 대한 예제 일뿐입니다. –

관련 문제