我正在尝试检测Vagrant主机是否在本地连接到我需要访问的网络。如果不是,我想要求并配置一个代理,这样我就可以下载构建项目所需的一些内部资源。
无论成功或失败,如何在给定的秒数之后发出超时的HTTP请求?
我期望以下代码在经过的时间内返回1或2秒:
HTTP_NETWORK_TEST_HOST = '172.16.0.1'
start1 = Time.now
begin
http = Net::HTTP.new(HTTP_NETWORK_TEST_HOST, '80')
http.read_timeout = 2
http.open_timeout = 2
response = http.start do |http|
http.get('/')
end
NETWORK_PROXY_NEEDED = false
rescue Timeout::Error => e
NETWORK_PROXY_NEEDED = true
end
finish1 = Time.now
start2 = Time.now
begin
Timeout::timeout(1) {
http = Net::HTTP.new(HTTP_NETWORK_TEST_HOST, '80')
response = http.start do |http|
http.get('/')
end
}
NETWORK_PROXY_NEEDED = false
rescue
NETWORK_PROXY_NEEDED = true
end
finish2 = Time.now
start3 = Time.now
begin
http = Net::HTTP.start(HTTP_NETWORK_TEST_HOST, '80', {read_timeout: 5, open_timeout: 5})
response = http.get('/')
NETWORK_PROXY_NEEDED = false
rescue Timeout::Error => e
NETWORK_PROXY_NEEDED = true
end
finish3 = Time.now
puts 'time 1'
puts finish1 - start1
puts 'time 2'
puts finish2 - start2
puts 'time 3'
puts finish3 - start3在以下方面的成果:
time 1
21.003133
time 2
21.012332
time 3
21.009758的答案是由freenode: #ruby上的al2o3-cr提供给我的。
https://gist.github.com/gr33n7007h/d041f4fbc08f0e065854bb180330c3ac
NETWORK_PROXY_NEEDED =
begin
Socket.tcp(TEST_HOST, 80, connect_timeout: 1)&.close
false
rescue Errno::ETIMEDOUT
true
end发布于 2019-11-06 22:53:27
的答案是由freenode: #ruby上的al2o3-cr提供给我的。
https://gist.github.com/gr33n7007h/d041f4fbc08f0e065854bb180330c3ac
NETWORK_PROXY_NEEDED =
begin
Socket.tcp(TEST_HOST, 80, connect_timeout: 1)&.close
false
rescue Errno::ETIMEDOUT
true
endhttps://stackoverflow.com/questions/58739232
复制相似问题