我正在使用Ruby 1.9.3并且需要获取URL。我与Net::HTTP
合作,但是,如果网站停用,Net::HTTP
最终会挂起。
在搜索互联网时,我看到很多人都面临类似的问题,所有人都有黑客解决方案。但是,很多帖子都很老了。
要求:
Net::HTTP
安装新的gem。require open-uri
,因为这会导致全局变化并引发一些安全问题。使用Ruby 1.9.3,如何在设置超时时获取URL?
为了澄清,我现有的代码如下:
Net::HTTP.get_response(URI.parse(url))
尝试添加:
Net::HTTP.open_timeout(1000)
结果:
NoMethodError: undefined method `open_timeout' for Net::HTTP:Class
答案 0 :(得分:3)
您可以在建立连接之前设置Net::HTTP
对象的open_timeout
属性。
uri = URI.parse(url)
Net::HTTP.new(uri.hostname, uri.port) do |http|
http.open_timeout = 1000
response = http.request_get(uri.request_uri)
end
答案 1 :(得分:2)
我在这里尝试了所有的解决方案以及关于这个问题的其他问题,但是我只使用以下代码完成了一切,open-uri gem是net :: http的包装器。 我需要一个必须等待超过默认超时的get并读取响应。代码也更简单。
require 'open-uri'
open(url, :read_timeout => 5 * 60) do |response|
if response.read[/Return: Ok/i]
log "sending ok"
else
raise "error sending, no confirmation received"
end
end