如何实现 https 请求的自定义'time out'?



我有通过https获取数据的工作代码(如下(。事实上,它通过php运行一些测试。我使用了工作正常的标准超时。现在,在"等待"服务器响应时,我需要实现计时器。因为在某些情况下测试不会完成 - php 代码不会完成 - ruby 超时工作正常。所以我需要杀死一些进程来捕获现有https会话中的错误。

如何在现有超时之上实现自己的 https 请求超时?

现有超时将始终大于自定义超时。 例如,现有超时为 10 分钟,自定义时间为 5 分钟。

uri = URI.parse(url)
start = Time.new
http_read_timeout=60*10
connection = Net::HTTP.new(uri.host, 443)
connection.use_ssl = true
begin   
        response = connection.start() do |http|
            http.open_timeout =  50
            http.read_timeout = http_read_timeout
            http.request_get(uri.request_uri)
            # here I need to place a code that is triggered 
            # in case of custom timeout is reached
        end
rescue Timeout::Error
#  "Connection failed
    time_out_message ="security time out - after #{http_read_timeout} sec"
return time_out_message         
end
puts "finished"

我不明白。自定义超时有什么作用?您正在发出 HTTP 请求...它要么返回,要么超时。

您已经在设置超时值。你的代码无法到达未来并告诉你外部代码最终会返回什么,如果是的话......那么你到底想让它做什么呢?

但是如果你真的只需要一个外部超时包装器,你可以使用 Timeout::Timeout。喜欢这个:

require 'timeout'
Timeout::timeout(your_timeout_period) do
  run_some_code
rescue => err
  do_something_with err
  # and maybe the below?
  raise
end

相关内容

  • 没有找到相关文章

最新更新