我注意到当我使用Mechanize获取没有响应的网站时,它只是在等待。
我该如何克服这个问题?
答案 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_timeout
和read_timeout
,请尝试使用它们。
agent = Mechanize.new { |a| a.log = Logger.new("mech.log") }
agent.keep_alive=false
agent.open_timeout=15
agent.read_timeout=15
HTH