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.

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)



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.



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