Skip to content

Instantly share code, notes, and snippets.

@benolee
Forked from alexisbernard/net_http_extension.rb
Created December 14, 2013 07:21
Show Gist options
  • Save benolee/7956460 to your computer and use it in GitHub Desktop.
Save benolee/7956460 to your computer and use it in GitHub Desktop.
# Convenient way to fetch URLs. It follows redirections and handles SSL. Usage:
# Net::HTTP.fetch_url('http://google.com')
# Net::HTTP.fetch_url('https://www.google.fr/?q=ruby')
module Net
class HTTP
def self.fetch_url(url, limit = 10)
raise ArgumentError, 'HTTP redirect too deep' if limit == 0
url = URI.parse(url)
options = {use_ssl: url.scheme.downcase == 'https'}
request = Net::HTTP::Get.new(url.path.to_s + '?' + url.query.to_s)
response = Net::HTTP.start(url.host, url.port, options) { |http| http.request(request) }
case response
when Net::HTTPSuccess then response
when Net::HTTPRedirection then fetch_url(response['location'], limit - 1)
else response.error!
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment