2012-04-17 195 views
2

我有一个网站,做四个不同的重新指导,似乎并不总是通过cookie。红宝石::机械化:: cookie_jar

所以我在这里研究和尝试了一些类似的解决方案:

创建一个临时cookie_jar和分配每个时间。 我也试图通过手工饼干,像这样:

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?

或者是否有更好的方法来做到这一点?

回答

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 
+0

谢谢!这工作。 – user1198316 2012-04-20 01:34:30