0

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"
4

1 に答える 1

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
于 2012-05-23T01:52:48.070 に答える