lib/url_canonicalize/request.rb in url_canonicalize-0.1.0 vs lib/url_canonicalize/request.rb in url_canonicalize-0.1.1
- old
+ new
@@ -21,10 +21,12 @@
def request
@request ||= request_for_method
end
def handle_response
+ log_response
+
case response
when Net::HTTPSuccess
handle_success
when Net::HTTPRedirection
handle_redirection
@@ -50,21 +52,25 @@
case response
when Net::HTTPFound, Net::HTTPMovedTemporarily, Net::HTTPTemporaryRedirect
self.http_method = :get
handle_success
else
- location = relative_to_absolute(response['location'])
- URLCanonicalize::Response::Redirect.new(location)
+ if location
+ URLCanonicalize::Response::Redirect.new(location)
+ else
+ URLCanonicalize::Response::Failure.new(::URI::InvalidURIError, response['location'])
+ end
end
end
def handle_failure(klass = response.class, message = response.message)
URLCanonicalize::Response::Failure.new(klass, message)
end
def enhanced_response
if canonical_url
+ puts " * canonical_url:\t#{canonical_url}" if ENV['DEBUG']
response_plus = URLCanonicalize::Response::Success.new(canonical_url, response, html)
URLCanonicalize::Response::CanonicalFound.new(canonical_url, response_plus)
else
URLCanonicalize::Response::Success.new(url, response, html)
end
@@ -96,10 +102,14 @@
def host
@host ||= uri.host
end
+ def location
+ @location ||= relative_to_absolute(response['location'])
+ end
+
def request_for_method
r = base_request
headers.each { |header_key, header_value| r[header_key] = header_value }
r
end
@@ -145,16 +155,22 @@
partial_uri = ::URI.parse(partial_url)
if partial_uri.host
partial_url # It's already absolute
else
- base_uri = uri.dup || ::URI.parse(url)
- base_uri.path = partial_url
- base_uri.to_s
+ ::URI.join((uri || url), partial_url).to_s
end
+ rescue ::URI::InvalidURIError
+ nil
end
+ def log_response
+ puts "#{http_method.upcase} #{url} #{response.code} #{response.message}" if ENV['DEBUG']
+ return unless ENV['DEBUG'].casecmp('headers')
+ response.each { |k, v| puts " #{k}:\t#{v}"}
+ end
+
NETWORK_EXCEPTIONS = [
EOFError,
Errno::ECONNREFUSED,
Errno::ECONNRESET,
Errno::EHOSTUNREACH,
@@ -163,9 +179,11 @@
Errno::ETIMEDOUT,
Net::OpenTimeout,
Net::ReadTimeout,
OpenSSL::SSL::SSLError,
SocketError,
- Timeout::Error
+ Timeout::Error,
+ Zlib::BufError,
+ Zlib::DataError
].freeze
end
end