Rails HTTP Ping 到不可靠的目标
Rails HTTP Ping to unreliable Target
我想向一个 IP 地址和端口发送一个 HTTP GET 请求,以确定是否有在线设备可以响应该地址。
我想要一个相对合理的超时,这样我的应用程序就不会在连接时挂起,如果没有的话。我一直在使用Net::HTTP
,但是似乎没有办法在使用ip地址时设置超时。
res = Net::HTTP.get_response(ip_address, '/index.html', port)
在使用 ip 地址而不是域名时,是否有执行此请求的最佳实践或更好的方法或在 Net::HTTP
中设置超时的方法?
我在 Heroku 上使用 Ruby 2.1.5 和 Rails 4.1.0 托管。
不确定您要找什么。 Net::HTTP
-class中有read_timeout
-setter。看这里:http://docs.ruby-lang.org/en/2.1.0/Net/HTTP.html#method-i-read_timeout-3D
关于HTTParty可以看看gem。 gem 提供了许多选项并且易于使用。
您将请求的超时设置为 return 响应
response = HTTParty.get('https://www.google.co.in/', timeout: 60)
超时以秒为单位。
或者在 Net http 中你可以设置为,
uri = URI.parse(ip_address + '/index.html')
request = Net::HTTP::Get.new(uri.path)
begin
response = Net::HTTP.start(uri.host, uri.port) {|http|
http.read_timeout = 100 #Default is 60 seconds
http.request(request)
}
rescue Net::ReadTimeout => e
puts e.message
end
通过 ip 地址请求或通过 dns 名称请求之间没有重大区别,在后一种情况下,进行 DNS 查询并且通常设置 Host
-header,然后通过 ip 完成该请求。
在 Net::HTTP
中有 open_timeout
设置,如果在此期间无法建立连接,则在设置时引发 Net::OpenTimeout
。默认情况下它是 nil
这意味着 'forever'
我想向一个 IP 地址和端口发送一个 HTTP GET 请求,以确定是否有在线设备可以响应该地址。
我想要一个相对合理的超时,这样我的应用程序就不会在连接时挂起,如果没有的话。我一直在使用Net::HTTP
,但是似乎没有办法在使用ip地址时设置超时。
res = Net::HTTP.get_response(ip_address, '/index.html', port)
在使用 ip 地址而不是域名时,是否有执行此请求的最佳实践或更好的方法或在 Net::HTTP
中设置超时的方法?
我在 Heroku 上使用 Ruby 2.1.5 和 Rails 4.1.0 托管。
不确定您要找什么。 Net::HTTP
-class中有read_timeout
-setter。看这里:http://docs.ruby-lang.org/en/2.1.0/Net/HTTP.html#method-i-read_timeout-3D
关于HTTParty可以看看gem。 gem 提供了许多选项并且易于使用。
您将请求的超时设置为 return 响应
response = HTTParty.get('https://www.google.co.in/', timeout: 60)
超时以秒为单位。
或者在 Net http 中你可以设置为,
uri = URI.parse(ip_address + '/index.html')
request = Net::HTTP::Get.new(uri.path)
begin
response = Net::HTTP.start(uri.host, uri.port) {|http|
http.read_timeout = 100 #Default is 60 seconds
http.request(request)
}
rescue Net::ReadTimeout => e
puts e.message
end
通过 ip 地址请求或通过 dns 名称请求之间没有重大区别,在后一种情况下,进行 DNS 查询并且通常设置 Host
-header,然后通过 ip 完成该请求。
在 Net::HTTP
中有 open_timeout
设置,如果在此期间无法建立连接,则在设置时引发 Net::OpenTimeout
。默认情况下它是 nil
这意味着 'forever'