Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby 1.9.3中设置HTTP超时_Ruby_Httprequest_Ruby 1.9.3_Net Http - Fatal编程技术网

在Ruby 1.9.3中设置HTTP超时

在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

我正在使用Ruby 1.9.3,需要获取URL。我使用的是
Net::HTTP
,但是,如果站点关闭,
Net::HTTP
最终会挂起

在搜索互联网的过程中,我看到许多人都面临着类似的问题,所有这些问题都有黑客的解决方案。然而,这些职位中的许多都相当陈旧

要求:

  • 与安装新的gem相比,我更喜欢使用
    Net::HTTP
  • 我需要身体和反应码。(例如200)
  • 我不想
    要求打开uri
    ,因为这会导致全局更改并引发一些安全问题
  • 我需要在X秒内获取URL,否则返回错误
使用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
您可以在建立连接之前设置
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
方法,整个过程正常运行。