def request(options)
      host = options.delete(:host) || HOST
      path = options.delete(:path) or raise ArgumentError, "No path given"

      request = Net::HTTP::Post.new(path)

      response = http(host).start do |http|
        add_common_options!(options)
        add_timestamp!(options)
        add_signature!(host, path, options)
        set_form_data!(request, options)
        http.request(request)
      end

      handle_response(response)
    end
def request(options)
      host = options.delete(:host) || HOST
      path = options.delete(:path) or raise ArgumentError, "No path given"

      request = Net::HTTP::Post.new(path)

      response = http(host).start do |http|
        add_common_options!(options)
        add_timestamp!(options)
        add_signature!(host, path, options)
        set_form_data!(request, options)
        http.request(request)
      end

      handle_response(response)
    end
==== Parameters:
 +options+:: Hash of options

 ==== Options:
 +access_key_id+:: access key id
 +secret_access_key+:: secret access key
 +use_ssl+:: optional, defaults to false
 +debug+:: optional, defaults to false
 +timeout+:: optional, for Net::HTTP
 Makes request with given HTTP method, sets missing parameters,
 adds signature to request header and returns response object
 (Net::HTTPResponse)

 ==== Parameters:
 +options+:: hash of options

 ==== Options:
 +host+:: hostname to connect to, optional, defaults to queue.amazonaws.com
 +path+:: path to send request to, required, throws ArgumentError if not given

 ==== Returns:
 Net::HTTPResponse object -- response from remote server