首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在经过X时间后使Ruby超时成为HTTP请求

如何在经过X时间后使Ruby超时成为HTTP请求
EN

Stack Overflow用户
提问于 2019-11-06 22:10:56
回答 1查看 69关注 0票数 1

我正在尝试检测Vagrant主机是否在本地连接到我需要访问的网络。如果不是,我想要求并配置一个代理,这样我就可以下载构建项目所需的一些内部资源。

无论成功或失败,如何在给定的秒数之后发出超时的HTTP请求?

我期望以下代码在经过的时间内返回1或2秒:

代码语言:javascript
复制
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

在以下方面的成果:

代码语言:javascript
复制
time 1
21.003133
time 2
21.012332
time 3
21.009758

的答案是由freenode: #ruby上的al2o3-cr提供给我的。

https://gist.github.com/gr33n7007h/d041f4fbc08f0e065854bb180330c3ac

代码语言:javascript
复制
NETWORK_PROXY_NEEDED = 
begin
  Socket.tcp(TEST_HOST, 80, connect_timeout: 1)&.close
  false
rescue Errno::ETIMEDOUT
  true
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-06 22:53:27

的答案是由freenode: #ruby上的al2o3-cr提供给我的。

https://gist.github.com/gr33n7007h/d041f4fbc08f0e065854bb180330c3ac

代码语言:javascript
复制
NETWORK_PROXY_NEEDED = 
begin
  Socket.tcp(TEST_HOST, 80, connect_timeout: 1)&.close
  false
rescue Errno::ETIMEDOUT
  true
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58739232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档