Class: AWS::Core::Http::NetHttpHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/aws/core/http/net_http_handler.rb

Overview

NetHttpHandler

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ ConnectionPool

Returns a connection pool constructed from the given options. Calling this method twice with the same options will return the same pool.

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :proxy_uri (URI::HTTP, String)

    A proxy to send requests through. Formatted like 'http://proxy.com:123'.

  • :http_continue_timeout (Float) — default: nil

    The number of seconds to wait for a 100-continue response before sending the request body. This option has no effect unless the request has "Expect" header set to "100-continue". Defaults to nil which disables this behaviour. This value can safely be set per-request on the session yeidled by #session_for.

  • :http_idle_timeout (Float) — default: 15

    The number of seconds a connection is allowed to sit idble before it is considered stale. Stale connections are closed and removed from the pool before making a request.

  • :http_open_timeout (Float) — default: 15

    The number of seconds to wait when opening a HTTP session before rasing a Timeout::Error.

  • :http_read_timeout (Integer) — default: 60

    The default number of seconds to wait for response data. This value can safely be set per-request on the session yeidled by #session_for.

  • :http_wire_trace (Boolean) — default: false

    When true, HTTP debug output will be sent to the :logger.

  • :logger (Logger)

    Where debug output is sent. Defaults to nil when :http_wire_trace is false. Defaults to Logger.new($stdout) when :http_wire_trace is true.

  • :ssl_verify_peer (Boolean) — default: true

    When true, SSL peer certificates are verified when establishing a connection.

  • :ssl_ca_file (String)

    Full path to the SSL certificate authority bundle file that should be used when verifying peer certificates. If you do not pass :ssl_ca_file or :ssl_ca_path the the system default will be used if available.

  • :ssl_ca_path (String)

    Full path of the directory that contains the unbundled SSL certificate authority files# for verifying peer certificates. If you do not pass :ssl_ca_file or :ssl_ca_path the the system default will be used if available.



36
37
38
# File 'lib/aws/core/http/net_http_handler.rb', line 36

def initialize options = {}
  @pool = ConnectionPool.new(options)
end

Instance Attribute Details

#poolConnectionPool (readonly)

Returns:

  • (ConnectionPool)


41
42
43
# File 'lib/aws/core/http/net_http_handler.rb', line 41

def pool
  @pool
end

Instance Method Details

#handle(request, response, &read_block) ⇒ nil

Given a populated request object and an empty response object, this method will make the request and them populate the response.

Parameters:

Returns:

  • (nil)


49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/aws/core/http/net_http_handler.rb', line 49

def handle request, response, &read_block
  begin

    @pool.session_for(request.endpoint) do |http|

      http.read_timeout = request.read_timeout
      http.continue_timeout = request.continue_timeout if
        http.respond_to?(:continue_timeout=)

      http.request(build_net_http_request(request)) do |net_http_resp|
        response.status = net_http_resp.code.to_i
        response.headers = net_http_resp.to_hash
        if block_given? and response.status < 300
          net_http_resp.read_body(&read_block)
        else
          response.body = net_http_resp.read_body
        end
      end

    end

  # The first rescue clause is required because Timeout::Error is
  # a SignalException (in Ruby 1.8, not 1.9).  Generally, SingalExceptions
  # should not be retried, except for timeout errors.
  rescue Timeout::Error => error
    response.network_error = error
  rescue *PASS_THROUGH_ERRORS => error
    raise error
  rescue Exception => error
    response.network_error = error
  end
  nil
end