2011-08-12 17 views
14

Ruby版のMechanizeを使用して、弊社の雇用主のチケットを、私たちが離れて行くチケット管理システムから抽出します。これはAPIを提供しません。Mechanizeリクエスト間でクッキーを維持する

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であり、私はしました:

問題は、Mechanizeのはpostコールと以下のようget呼び出しの間でクッキーを保っていないようで、ありますこれが実際にログインしていることが確認されましたが、getコールから返されるページは「おっと、ログインしていません!ページ。

postコールから返されたページ上のリンクがclickであることを確認しましたが、実際にはJavaScriptなしで移動する必要はありません。もちろん、同じログインでブラウザでうまくやったことがあります。

私は間違っていますか?

答えて

12

これはあなたのお役に立つかもしれません - まずどの機械化バージョンを使用していますか?この問題が、要求間の機械化によってクッキーが上書きされる/またはクッキーが最初に間違っている/設定されていないことが原因であるかどうかを特定する必要があります。 2つの要求の間にputs @agent.cookie_jar.jarを追加して、何が格納されているかを確認することで、これを行うことができます。

上書きの問題がある場合は、最初のリクエストからCookieを収集し、2番目のリクエストに適用することで解決できる可能性があります。これを行うには多くの方法があります。

一つの方法は、もう一度もつとも.add方法

を使用して、単に各クッキーを経た後temp_jar = agent.cookie_jar.jar行うと、それを追加することですが - 最も簡単な方法は、単にインストールすることですあなたが非常に簡単にそれを行うことができるので、機械化の最新の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 

をところでドキュメントは、これはかなりあり、ここでhttp://mechanize.rubyforge.org/index.html

+0

です:gem install mechanize --preを行い、この後に機械化gem uninstall mechanize 'some_version'の古いバージョンを取り除くことを確認して次のように、あなたは、単に行うことができ、最新のをインストールするには 悪い、なぜ新しい機械化のインスタンスが必要ですか? –

+0

@DitmarWendtこれは、ログインポスト実行後に以前に取得したクッキーを再利用する方法の一例です。 –

関連する問題