def request(verb, url, headers={}, body=nil)
if verb == :get
headers['Accept-Encoding'] = 'gzip, deflate'
end
self.uri = URI.parse(url)
http_connect! if http.nil? || !http.started?
req_klass = instance_eval("Net::HTTP::"+verb.to_s.capitalize)
req = req_klass.new(uri.to_s, headers)
req.body = body if !body.nil? && !body.empty?
retries = 2
begin
r = http.request(req)
rescue EOFError, Errno::EPIPE
http_connect!
retries -= 1
retry if retries >= 0
end
if verb == :get && r.header['Content-Encoding'] == 'gzip'
gz = Zlib::GzipReader.new(StringIO.new(r.body))
response_body = gz.read
else
response_body = r.body
end
UberS3::Response.new({
:status => r.code.to_i,
:header => r.header.to_hash,
:body => response_body,
:raw => r
})
end