在Ruby 1.9.3中设置HTTP超时
我正在使用Ruby 1.9.3,需要获取URL。我使用的是在Ruby 1.9.3中设置HTTP超时,ruby,httprequest,ruby-1.9.3,net-http,Ruby,Httprequest,Ruby 1.9.3,Net Http,我正在使用Ruby 1.9.3,需要获取URL。我使用的是Net::HTTP,但是,如果站点关闭,Net::HTTP最终会挂起 在搜索互联网的过程中,我看到许多人都面临着类似的问题,所有这些问题都有黑客的解决方案。然而,这些职位中的许多都相当陈旧 要求: 与安装新的gem相比,我更喜欢使用Net::HTTP 我需要身体和反应码。(例如200) 我不想要求打开uri,因为这会导致全局更改并引发一些安全问题 我需要在X秒内获取URL,否则返回错误 使用Ruby 1.9.3,如何在设置超时时获取U
Net::HTTP
,但是,如果站点关闭,Net::HTTP
最终会挂起
在搜索互联网的过程中,我看到许多人都面临着类似的问题,所有这些问题都有黑客的解决方案。然而,这些职位中的许多都相当陈旧
要求:
- 与安装新的gem相比,我更喜欢使用
Net::HTTP
- 我需要身体和反应码。(例如200)
- 我不想
,因为这会导致全局更改并引发一些安全问题要求打开uri
- 我需要在X秒内获取URL,否则返回错误
为了澄清,我的现有代码如下所示:
Net::HTTP.get_response(URI.parse(url))
正在尝试添加:
Net::HTTP.open_timeout(1000)
结果:
NoMethodError: undefined method `open_timeout' for Net::HTTP:Class
您可以在建立连接之前设置Net::HTTP
对象的属性
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
我在这里尝试了所有的解决方案,以及关于这个问题的其他问题,但是我只通过下面的代码就完全正确了,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
麦克斯-我不知道该怎么做。我在
Net:HTTP
class上使用class方法get\u request
;然而,open\u timeout
是HTTPSession
上的一种方法。open\u timeout
是否控制某些单例中的全局设置?Net::HTTP
有许多令人困惑的类方法,它们基本上是创建Net::HTTP
对象的快捷方式(有关详细信息,请参阅源代码)。有关如何自己创建Net::HTTP
对象的信息,请参见我的编辑。如何使用该代码获得结果(正文和HTTP结果代码)?请阅读文档http.request\u get
返回与Net::http.get\u response
相同的内容,我尝试了它,但是new
方法对我来说不适用于块。我将new
方法更改为start
方法,整个过程正常运行。