You are viewing documentation for version 1 of the AWS SDK for Ruby. Version 2 documentation can be found here.
Class: AWS::Core::Http::NetHttpHandler
- Inherits:
-
Object
- Object
- AWS::Core::Http::NetHttpHandler
- 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.
Defined Under Namespace
Classes: TruncatedBodyError
Constant Summary
Instance Attribute Summary collapse
-
#pool ⇒ ConnectionPool
readonly
Instance Method Summary collapse
-
#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.
-
#initialize(options = {}) ⇒ ConnectionPool
constructor
Returns a connection pool constructed from the given options.
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.
37 38 39 40 |
# File 'lib/aws/core/http/net_http_handler.rb', line 37 def initialize = {} @pool = [:connection_pool] || ConnectionPool.new() @verify_content_length = [:verify_response_body_content_length] end |
Instance Attribute Details
#pool ⇒ ConnectionPool (readonly)
43 44 45 |
# File 'lib/aws/core/http/net_http_handler.rb', line 43 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.
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 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/aws/core/http/net_http_handler.rb', line 51 def handle request, response, &read_block retry_possible = true 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=) exp_length = nil act_length = 0 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 exp_length = determine_expected_content_length(response) if block_given? and response.status < 300 net_http_resp.read_body do |data| begin act_length += data.bytesize yield data unless data.empty? ensure retry_possible = false end end else response.body = net_http_resp.read_body act_length += response.body.bytesize unless response.body.nil? end end run_check = exp_length && request.http_method != "HEAD" && @verify_content_length if run_check && act_length != exp_length raise TruncatedBodyError, 'content-length does not match' end end rescue *NETWORK_ERRORS => error raise error unless retry_possible response.network_error = error end nil end |