红宝石::机械化:: cookie_jar

时间:2012-04-17 15:42:21

标签: ruby cookies mechanize mechanize-ruby

我有一个网站可以执行四种不同的重定向,并且似乎并不总是传递cookie。

所以我在这里研究并尝试了一些解决方案,如:

创建临时cookie_jar并每次分配。 我还试图像这样手动传递cookie:

cookie = Mechanize::Cookie.new("TLSID",bot.cookie_jar.jar['.manageyourloans.com']    
["/"]["TLSID"].value)
cookie.domain = ".manageyourloans.com"
cookie.path = "/"
bot.cookie_jar.add(bot.history.last.uri,cookie)

cookie = Mechanize::Cookie.new("TLHID",bot.cookie_jar.jar['.manageyourloans.com']
["/"]["TLHID"].value)
cookie.domain = ".manageyourloans.com"
cookie.path = "/"
bot.cookie_jar.add(bot.history.last.uri,cookie)

上述问题是,如果不需要传递,我会收到错误 是否可以执行以下操作。有10-12个不同的cookie值似乎已经通过,有些包含每个页面(重定向)或只有少数几个。如何执行上述操作并手动传递cookie,但如果该值不存在则只传递null?

或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我注意到过去使用某个版本的机械化时出现问题,当Cookie域看起来像:.domain.com并且请求是针对domain.com时,cookie就不会被设置。

这可能不是处理它的最好方法,但我当时的解决方案是使用补丁机制来剥离cookie的域名部分:

class Mechanize::Cookie
  class << self; alias_method :old_parse, :parse end
  def self.parse(uri, str, log = Mechanize.log, &block)
    str.gsub!(/domain[^;]*;/,'')
    old_parse(uri, str, log, &block)
  end
end