我有通过https(下面)获取数据的工作代码。实际上它通过php运行一些测试。我使用标准超时工作正常。现在,在“等待”服务器响应时,我需要实现计时器。因为在某些情况下测试将无法完成 - PHP代码将无法完成 - 红宝石超时工作正常。所以我需要杀死一些进程来捕获现有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"
答案 0 :(得分:1)
我不明白。你的自定义超时有什么作用?您正在发出HTTP请求...它会返回或超时。
您已经设置了超时值。你的代码无法进入未来&告诉你外部代码最终将返回什么,如果它确实...那么你想要它做什么,确切地说?
但是如果你真的需要一个外部Timeout包装器,你可以使用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