2011-10-25 23 views
2

我有這樣的代碼,我成功登錄:當我在一個會話中請求新頁面時,如何保存cookie?

require 'mechanize' 
require 'logger' 
agent = Mechanize.new{|a| a.log = Logger.new(STDERR) } 
agent.read_timeout = 60 
def add_cookie(agent, uri, cookie) 
    uri = URI.parse(uri) 
    Mechanize::Cookie.parse(uri, cookie) do |cookie| 
    agent.cookie_jar.add(uri, cookie) 
    end 
end 
page = agent.get "http://www.webpage.com" 
form = page.forms.first 
form.correo_ingresar = "user" 
form.password = "password" 
page = agent.submit form 
myarray = page.body.scan(/SetCookie\(\"(.+)\", \"(.+)\"\)/) 

後,我登錄,我不重定向,所以我看着網頁和Java是一個重定向我,但如果我用page = agent.get("http://webpage.com")所有會話cookie被刪除。而且我必須再次登錄,這是一個循環,因爲我沒有超越。我已經嘗試了幾個建議,如ignore_discard

回答

3

它看起來像你有正確的代碼添加cookie,但忘記調用它。 最後嘗試:

myarray.each{|line| add_cookie agent, 'http://www.sistemasaplicados.com.mx', "#{line[0]}=#{line[1]}"} 
+0

謝謝你,這是我需要的 – ingalcala

1

當使用同一個實例獲取新頁面時,機械化會自動接收,存儲和發送cookie。

  1. 你確定該網站實際上是發送cookie嗎?
  2. 您是否確認Mechanize確實沒有發送Cookie? (您是否檢查了它發送的請求標頭?)
  3. 您說「Java正在重定向我」;你真的指JavaScript嗎?
+0

@Phroz謝謝你的答案。 您可以看到,該網站正在使用登錄表單,當我打開並登錄時,如果我關閉瀏覽器並再次打開它將不會被登錄,因此我必須重新登錄。我不知道如果它有答案,如果它有cookie。我知道的是,在我提交機械化表單後,再次使用頁面,它會要求我再次登錄機械。就好像我以前沒有登錄過。在同一個Interactive Ruby Console中。 – ingalcala

相關問題