如何在没有响应的网站上等待Mechanize?

时间:2011-04-07 13:45:30

标签: ruby-on-rails ruby mechanize

我注意到当我使用Mechanize获取没有响应的网站时,它只是在等待。

我该如何克服这个问题?

2 个答案:

答案 0 :(得分:10)

有几种方法可以解决它。

Open-Uri和Net :: HTTP都有传递超时值的方法,然后告诉底层网络堆栈你愿意等多久。例如,Mechanize允许您在初始化实例时获取其设置,例如:

mech = Mechanize.new { |agent|
  agent.open_timeout   = 5
  agent.read_timeout   = 5
}

这些都在new的文档中,但您必须查看源代码以查看可以获得的实例变量。

或者您可以使用Ruby的timeout模块:

require 'timeout'
status = Timeout::timeout(5) {
  # Something that should be interrupted if it takes too much time...
}

答案 1 :(得分:3)

此页面上的

http://mechanize.rubyforge.org/mechanize/Mechanize.html有2个未记录的属性open_timeoutread_timeout,请尝试使用它们。

agent = Mechanize.new { |a| a.log = Logger.new("mech.log") }
agent.keep_alive=false
agent.open_timeout=15
agent.read_timeout=15

HTH