class RedirectFollower
Constants
- REDIRECT_DEFAULT_LIMIT
Attributes
body[RW]
headers[RW]
redirect_limit[RW]
response[RW]
url[RW]
Public Class Methods
new(url, options = {})
click to toggle source
# File lib/redirect_follower.rb, line 9 def initialize(url, options = {}) @url = url @redirect_limit = options[:redirect_limit] || REDIRECT_DEFAULT_LIMIT @headers = options[:headers] || {} end
Public Instance Methods
redirect_url()
click to toggle source
# File lib/redirect_follower.rb, line 38 def redirect_url if response['location'].nil? response.body.match(/<a href=\"([^>]+)\">/i)[1] else response['location'] end end
resolve()
click to toggle source
# File lib/redirect_follower.rb, line 15 def resolve raise TooManyRedirects if redirect_limit < 0 uri = Addressable::URI.parse(url) http = Net::HTTP.new(uri.host, uri.inferred_port) if uri.scheme == 'https' http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_PEER end self.response = http.request_get(uri.request_uri, @headers) if response.kind_of?(Net::HTTPRedirection) self.url = redirect_url self.redirect_limit -= 1 resolve end self.body = response.body self end