# File lib/patron/session.rb, line 178
    def request(action, url, headers, options = {})
      # If the Expect header isn't set uploads are really slow
      headers['Expect'] ||= ''

      req = Request.new
      req.action = action
      req.timeout = self.timeout
      req.connect_timeout = self.connect_timeout
      req.max_redirects = self.max_redirects
      req.headers = self.headers.merge(headers)
      req.username = self.username
      req.password = self.password
      req.multipart = options[:multipart]
      req.upload_data = options[:data]
      req.file_name = options[:file]
      req.proxy = proxy
      req.proxy_type = proxy_type
      req.auth_type = auth_type
      req.insecure = insecure
      req.buffer_size = buffer_size

      req.url = self.base_url.to_s + url.to_s
      raise ArgumentError, "Empty URL" if req.url.empty?

      handle_request(req)
    end