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