def handle(request, response)
opts = default_request_options.merge({
:body => request.body,
:parser => NoOpParser
})
if request.proxy_uri
opts[:http_proxyaddr] = request.proxy_uri.host
opts[:http_proxyport] = request.proxy_uri.port
end
if request.use_ssl?
protocol = 'https'
opts[:ssl_ca_file] = request.ssl_ca_file if request.ssl_verify_peer?
else
protocol = 'http'
end
url = "#{protocol}://#{request.host}:#{request.port}#{request.uri}"
method = request.http_method.downcase
headers = { 'content-type' => '' }
request.headers.each_pair do |key,value|
headers[key] = value.to_s
end
opts[:headers] = headers
begin
http_response = self.class.send(method, url, opts)
rescue Timeout::Error, Errno::ETIMEDOUT => e
response.timeout = true
else
response.body = http_response.body
response.status = http_response.code.to_i
response.headers = http_response.to_hash
end
end