Base class for all service reqeusts. This class describes a basic HTTP request, but will not make one. It is consumed by a HTTP handler class that sends the actual request and parses the actual response.
@return [Float] timeout The number of seconds to wait for a
100-continue response before sending the HTTP request body.
@api private
@return [Integer] The number of seconds the service has to respond
before a timeout error is raised on the request.
@return [CaseInsensitiveHash] request headers
@return [String] hostname of the request
@return [String] Returns the HTTP request method (e.g. 'GET', 'PUT',
'POST', 'HEAD' or 'DELETE'). Defaults to 'POST'.
@return [Array<Param>] Returns an array of request params. Requests
that use signature version 2 add params to the request and then sign those before building the {#body}. Normally the {#body} should be set directly with the HTTP payload.
@api private
@return [Integer] Returns the port number this request will be
made via (usually 443 or 80).
@return [Integer] The number of seconds the service has to respond
before a timeout error is raised on the request.
@return [String] The region name this request is for. Only needs
to be populated for requests against signature v4 endpoints.
@return [String] The name of the service for Signature v4 signing.
This does not always match the ruby name (e.g. simple_email_service and ses do not match).
@return [String] Returns the request URI (path + querystring).
@return [Boolean] Returns `true` if this request should be made
with SSL enabled.
@return [Boolean] Returns `true` if this request should be made
with SSL enabled.
Returns a new empty http request object.
# File lib/aws/core/http/request.rb, line 27 def initialize @http_method = 'POST' @use_ssl = true @headers = CaseInsensitiveHash.new @uri = '/' @params = [] @read_timeout = 60 end
Adds a request param.
@overload #add_param(param_name, param_value = nil)
Add a param (name/value) @param [String] param_name @param [String] param_value Leave blank for sub resources
@overload #add_param(param_obj)
Add a param (object) @param [Param] param_obj
@api private
# File lib/aws/core/http/request.rb, line 129 def add_param name_or_param, value = nil if name_or_param.kind_of?(Param) @params << name_or_param else @params << Param.new(name_or_param, value) end end
@note Calling body on a request with a body_stream
will cause the entire stream to be read into memory.
@return [String,nil] Returns the request body.
# File lib/aws/core/http/request.rb, line 157 def body if @body @body elsif @body_stream @body = @body_stream.read if @body_stream.respond_to?(:rewind) @body_stream.rewind else @body_stream = StringIO.new(@body) end @body else nil end end
@param [String] body
# File lib/aws/core/http/request.rb, line 145 def body= body @body = body if body headers['content-length'] = body.bytesize if body else headers.delete('content-length') end end
@return [IO,nil]
# File lib/aws/core/http/request.rb, line 181 def body_stream if @body_stream @body_stream elsif @body StringIO.new(@body) else nil end end
Sets the request body as an IO object that will be streamed. @note You must also set the headers[‘content-length’] @param [IO] stream An object that responds to read and eof.
# File lib/aws/core/http/request.rb, line 176 def body_stream= stream @body_stream = stream end
# File lib/aws/core/http/request.rb, line 92 def endpoint scheme = use_ssl ? 'https' : 'http' port = case scheme when 'https' then self.port == 443 ? '' : ":#{self.port}" when 'http' then self.port == 80 ? '' : ":#{self.port}" end "#{scheme}://#{host}#{port}" end
@return [String] Returns the HTTP request path.
# File lib/aws/core/http/request.rb, line 108 def path uri.split(/\?/)[0] end
@return [String] Returns the HTTP request querystring.
# File lib/aws/core/http/request.rb, line 113 def querystring uri.split(/\?/)[1] end
@api private @return [String,nil] Returns the url encoded request params. If there
are no params, then nil is returned.
# File lib/aws/core/http/request.rb, line 140 def url_encoded_params params.empty? ? nil : params.sort.collect(&:encoded).join('&') end