def fetch(uri, counter = 0)
raise HTTPError, "Too many redirects" if counter >= redirect_limit
response = request(uri)
Bundler.ui.debug("HTTP #{response.code} #{response.message}")
case response
when Net::HTTPRedirection
new_uri = URI.parse(response["location"])
if new_uri.host == uri.host
new_uri.user = uri.user
new_uri.password = uri.password
end
fetch(new_uri, counter + 1)
when Net::HTTPSuccess
response.body
when Net::HTTPRequestEntityTooLarge
raise FallbackError, response.body
when Net::HTTPUnauthorized
raise AuthenticationRequiredError, uri.host
else
raise HTTPError, "#{response.class}: #{response.body}"
end
end