LoginSignup
2
3

More than 5 years have passed since last update.

Rubyでリダイレクトした後のURLを返すメソッド

Posted at

概要

個人的に必要だったので書きました。

コード

# uri_strに示されたURLにおける、リダイレクト後のURLを返す
# 変換途中でエラーが発生した場合は""を返す
# limitはリダイレクト数の上限
def redirect_url(uri_str, limit = 10)
  return_url = uri_str
  redirect_count = 0
  # リダイレクト後のURLを取得するためのwhileループ
  while true
    # リダイレクト数の上限を超えると例外を返す
    if redirect_count >= limit
      raise ArgumentError, 'HTTP redirect too deep'
    end
    # HTTPレスポンスを取得する
    response = Net::HTTP.get_response(URI.parse(return_url))
    # リダイレクトが発生した場合のみ、whileループを続行する
    # 最後がNet::HTTPSuccessじゃない場合は""を返す
    case response
      when Net::HTTPSuccess
        break
      when Net::HTTPRedirection
        return_url = response['location']
        redirect_count += 1
      else
        return_url = ""
        break
    end
  end
  return return_url
end

参考資料

2
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3