1

我遇到了 Mechanize::Cookie 行为不端的问题,我想尝试对其进行修补。我的代码:

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

当我添加这个时,cookie 没有被添加,我不知道为什么。

编辑: 要查看问题,请尝试使用和不使用猴子补丁的代码:

agent = Mechanize.new
agent.get 'http://www.google.com/'
pp agent.cookie_jar

如果没有补丁,您将看到一个完整的 cookie 罐,而它是一个空的。

4

1 回答 1

4

看起来原始的 parse 方法中有一个yield cookie if block_given?语句。您还需要能够传递一个块。

编辑:

为了更清楚...

class Foo
    def self.x
        yield "yielded from x!" if block_given?
    end
end

class Foo
    class <<self
        alias :y :x
    end
    # new implementation of x's last parameter is an optional block
    def self.x(&block) 
        puts "in redefined x."
        puts "block=#{block}"
        self.y(&block) #use the block as the last parameter 
    end
end

Foo.x{|value| puts "value is '#{value}'"}
于 2011-11-02T05:29:58.853 回答