class Fetcher
Wrap an HTTP session, handle making a request and following any redirects
Attributes
password[RW]
user[RW]
Public Class Methods
new()
click to toggle source
# File lib/abelard/load.rb, line 292 def initialize @host = nil @session = nil @user = nil @password = nil end
Public Instance Methods
get(url, max_depth=3) { |feedxml| ... }
click to toggle source
# File lib/abelard/load.rb, line 300 def get(url, max_depth=3) if (url.host != @host) @host = url.host @session = Net::HTTP.new(@host, url.port) @session.use_ssl = (url.scheme == 'https') end request = Net::HTTP::Get.new(url) request.basic_auth(user, password) if user msg = "Reading (#{url.to_s})" msg << " as #{user}" if user $stderr.puts(msg) feedxml = @session.request(request) if (feedxml.is_a? Net::HTTPOK) yield feedxml elsif (feedxml.is_a? Net::HTTPMovedPermanently ) new_url = feedxml['Location'] if ( new_url == url.to_s ) then puts("Confused! redirect to same url #{new_url}") else if ( max_depth == 0 ) puts("Too many redirects") else puts("Redirecting to #{new_url}") get(URI(new_url), max_depth-1) { |r| yield r } end end else puts("GET returned #{feedxml.code}") puts(feedxml.body) end end