当我在一个会话中请求新页面时,如何保存cookie?

时间:2011-10-25 20:27:45

标签: ruby mechanize

我有这段代码,我成功登录:

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

2 个答案:

答案 0 :(得分:3)

看起来您有正确的代码来添加Cookie但忘记调用它。 最后尝试:

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

答案 1 :(得分:1)

当使用相同的实例获取新页面时,Mechanize会自动接收,存储和发送cookie。

  1. 您确定该网站实际上是在发送Cookie吗?
  2. 您确认Mechanize真的没有发送cookie吗? (您是否检查了它发送的请求标头?)
  3. 你说“Java正在重定向我”;你真的是指JavaScript吗?