Module: FollowHttpRedirects

Defined in:
lib/follow_http_redirects/base.rb,
lib/follow_http_redirects/version.rb

Constant Summary collapse

VERSION =
"0.0.1"

Class Method Summary collapse

Class Method Details

.get_response_following_redirects(orig_uri, requests_limit = 15) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/follow_http_redirects/base.rb', line 2

def self.get_response_following_redirects orig_uri, requests_limit = 15
  raise "Input must be an absolute URI." unless orig_uri.is_a?(URI::Generic) && orig_uri.absolute?

  uri = orig_uri
  requests_made = 0
  while requests_made <= requests_limit
    response = Net::HTTP.get_response uri
    requests_made += 1
    case response
      when Net::HTTPSuccess
        return response
      when Net::HTTPRedirection
        redirect_url = response.header['location']
        unless redirect_url.is_a?(String) && !redirect_url.empty?
          raise "Redirect Error, no redirect location specified."
        end

        temp_uri = URI(redirect_url)
        if temp_uri.relative?
          uri = uri.merge temp_uri #make URI absolute
        else
          uri = temp_uri
        end
      else
        raise "Don't know what to do with this response: #{response.inspect}"
    end
  end
  raise "Too many redirects (#{requests_limit}) error"
end