open-uriにtimeout(タイムアウト/時間制限)を追加する[Ruby]


Eye Catch Image

Open-URIでデータを取得する際に、一定時間以上取得できない場合に問い合わせを諦めるための制御です。ごくごくシンプルなプログラムですが、個人的によく使うのでメモ。


🍮 ソースコード

ソースコードは以下のとおり。

require 'open-uri'
require 'resolv-replace'
require 'timeout'
TIME_OUT = 3
begin
timeout(TIME_OUT) { open(URI.encode(url), "r", {:ssl_verify_mode=>OpenSSL::SSL::VERIFY_NONE}) }
rescue TimeoutError => e
# timeout時の例外処理
rescue => e
# timeout以外の例外処理
end
  • resolv-replaceライブラリ: ホスト名解決にresolvライブラリを使うようにする(DNS検索でのタイムアウトを実現するため)
  • resolvライブラリ: DNSと連携した名前解決のためのライブラリ
  • TimeoutError: タイムアウト時のエラー

😸 参考リンク

open-uriにtimeoutを設定する方法 | Memorandum

📚 おすすめの書籍