# File lib/rhc/rest/client.rb, line 376
        def new_request(options)
          options.reverse_merge!(self.options)

          options[:connect_timeout] ||= options[:timeout] || 120
          options[:receive_timeout] ||= options[:timeout] || 0
          options[:send_timeout] ||= options[:timeout] || 0
          options[:timeout] = nil

          if auth = options[:auth] || self.auth
            auth.to_request(options)
          end

          headers = (self.headers.to_a + (options.delete(:headers) || []).to_a).inject({}) do |h,(k,v)|
            v = "application/#{v}" if k == :accept && v.is_a?(Symbol)
            h[k.to_s.downcase.gsub(/_/, '-')] = v
            h
          end

          user = options.delete(:user)
          password = options.delete(:password)
          if user
            headers['Authorization'] ||= "Basic #{["#{user}:#{password}"].pack('m').tr("\n", '')}"
          end

          modifiers = []
          version = options.delete(:api_version) || current_api_version
          modifiers << ";version=#{version}" if version

          query = options.delete(:query) || {}
          payload = options.delete(:payload)
          if options[:method].to_s.upcase == 'GET'
            query = payload
            payload = nil
          else
            headers['content-type'] ||= begin
                payload = payload.to_json unless payload.nil? || payload.is_a?(String)
                "application/json#{modifiers.join}"
              end
          end
          query = nil if query.blank?

          if headers['accept'] && modifiers.present?
            headers['accept'] << modifiers.join
          end

          # remove all unnecessary options
          options.delete(:lazy_auth)

          args = [options.delete(:method), options.delete(:url), query, payload, headers, true]
          [httpclient_for(options), args]
        end