我想向IP地址和端口发送HTTP GET请求,以确定是否有可以在该地址响应的在线设备。
我希望有一个相对合理的超时,以便我的应用程序在连接时不会挂起,如果没有。我一直在使用Net::HTTP
,但是在使用IP地址时似乎没有办法设置超时。
res = Net::HTTP.get_response(ip_address, '/index.html', port)
在使用IP地址而不是域名时,是否有最佳做法或更好的方法来执行此请求或在Net::HTTP
中设置超时?
我使用Ruby 2.1.5和Rails 4.1.0在Heroku上托管。
答案 0 :(得分:1)
您可以看到HTTParty gem。这个宝石提供了许多选项,并且易于使用。
您为请求设置超时以返回响应
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
答案 1 :(得分:0)
不确定您在寻找什么。在Net::HTTP
- 类中有read_timeout
- setter。见这里:http://docs.ruby-lang.org/en/2.1.0/Net/HTTP.html#method-i-read_timeout-3D
答案 2 :(得分:0)
通过ip地址或dns名称请求之间没有什么重大区别,在后一种情况下进行DNS查询,通常设置Host
- 标头,然后通过ip完成请求。
在Net::HTTP
open_timeout
设置中,如果在此期间无法建立连接,则会设置Net::OpenTimeout
。默认情况下,它是nil
,意思是“永远”