我正在尝试构建一段代码,以使用Mechanize和Ruby搜索超时的页面。我的测试台包括一页专门写给超时的页面,以及三页正常运行的页面。这是代码:
urls = ['http://example.com/regular.php','http://example.com/regular2.php','http://example.com/regular3.php', 'http://example.com/tmeout.php']
m = Mechanize.new
urls.each do |url|
begin
status = Timeout::timeout(5.0) {
m.get(url)
}
rescue Timeout::Error
puts "TIMED OUT: " + url
end
end
当超时URL是列表中的last元素时,这可以很好地工作。 timeout
链接打印到控制台。但是,如果timeout
链接不是列表中的最后一个元素(例如,我将其放在链接的第一位),则timeout
链接会打印到控制台,但是某些regular
链接也会打印到控制台。这似乎也是不确定的。每次我重新运行它时,都会在控制台上打印一组不同的链接。
谁能告诉我为什么会这样,并且有什么解决方法?我注意到,为每个迭代实例化一个新的mechanize
可以解决问题-但是这不是一个选择,因为程序的其他部分依赖于m
中的cookie,如果创建了一个新实例,它将被重置。有任何修复程序吗?
一个快速的Google展示了一些想法。一种是尝试在失败后重设Mechanize
。