2014年9月21日日曜日

rubyのopenuriやnet/http でエラーが出ちゃうときの対処

rubyのopenuriやnet/http で503とかのエラーがでるとき、何度かリトライしたいということがあります。 単純にアクセス繰り返すとDOSってると思われてしまいます。 次のようにGETを行うコードのラッパーとなるメソッドを作り、これを呼ぶとよさそう アクセス前の待機時間を引数にとっておき、503エラーが出た場合などは同じメソッドを待機時間を延ばしてリトライします。 400秒待ってダメなような場合はあきらめます。
     def carefulGet(url,waittime)
    begin
      sleep waittime
      charset = nil
      html = open(url, :proxy => nil) do |f|
        charset = f.charset
        f.read
      end
      return html
    rescue => evar
      puts evar
      if waittime<400 then
        puts 'GET error!! retry '
       #ここで同じメソッドを待機時間を上げて再起呼び出し
    carefulGet(url,waittime+20)
      else
        puts 'GET error!! QUIT'
      end
    end
  end

0 件のコメント:

コメントを投稿