class AWS::Core::Http::NetHttpHandler


and a connection pool.
Ruby’s Net::HTTP to make requests. It uses persistent connections
This is the default HTTP handler for the aws-sdk gem. It uses
= NetHttpHandler

def build_net_http_request request

Returns:
  • (Net::HTTPRequest) -

Parameters:
  • (Request) --
def build_net_http_request request
  # Net::HTTP adds a content-type header automatically unless its set
  # and this messes with request signature signing.  Also, it expects
  # all header values to be strings (it call strip on them).
  headers = { 'content-type' => '' }
  request.headers.each_pair do |key,value|
    headers[key] = value.to_s
  end
  request_class = case request.http_method
    when 'GET'    then Net::HTTP::Get
    when 'PUT'    then Net::HTTP::Put
    when 'POST'   then Net::HTTP::Post
    when 'HEAD'   then Net::HTTP::Head
    when 'DELETE' then Net::HTTP::Delete
    else raise "unsupported http method: #{request.http_method}"
    end
  net_http_req = request_class.new(request.uri, headers)
  net_http_req.body = request.body
  net_http_req
end

def handle request, response

Returns:
  • (nil) -

Parameters:
  • response (Response) --
  • request (Request) --
def handle request, response
  options = {}
  options[:port] = request.port
  options[:ssl] = request.use_ssl?
  options[:proxy_uri] = request.proxy_uri
  options[:ssl_verify_peer] = request.ssl_verify_peer?
  options[:ssl_ca_file] = request.ssl_ca_file if request.ssl_ca_file
  options[:ssl_ca_path] = request.ssl_ca_path if request.ssl_ca_path
  connection = pool.connection_for(request.host, options)
  connection.read_timeout = request.read_timeout
  begin
    http_response = connection.request(build_net_http_request(request))
    response.body = http_response.body
    response.status = http_response.code.to_i
    response.headers = http_response.to_hash
  rescue Timeout::Error, Errno::ETIMEDOUT => e
    response.timeout = true
  end
  nil
end

def initialize options = {}

(see Net::HTTP::ConnectionPool.new)
def initialize options = {}
  @pool = Net::HTTP::ConnectionPool.new(options)
end