def request(action, url, headers, options = {})
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