def request(self, method, url, params=None, data=None, headers=None, auth=None, timeout=None,<EOL>allow_redirects=False):
session = self.session or Session()<EOL>request = Request(method.upper(), url, params=params, data=data, headers=headers, auth=auth)<EOL>prepared_request = session.prepare_request(request)<EOL>if '<STR_LIT>' not in prepared_request.headers and '<STR_LIT:host>' not in prepared_request.headers:<EOL><INDENT>prepared_request.headers['<STR_LIT>'] = self._get_host(prepared_request)<EOL><DEDENT>validation_payload = self._build_validation_payload(prepared_request)<EOL>jwt = ClientValidationJwt(self.account_sid, self.api_key_sid, self.credential_sid,<EOL>self.private_key, validation_payload)<EOL>prepared_request.headers['<STR_LIT>'] = jwt.to_jwt()<EOL>response = session.send(<EOL>prepared_request,<EOL>allow_redirects=allow_redirects,<EOL>timeout=timeout,<EOL>)<EOL>return Response(int(response.status_code), response.text)<EOL>
Make a signed HTTP Request

:param str method: The HTTP method to use
:param str url: The URL to request
:param dict params: Query parameters to append to the URL
:param dict data: Parameters to go in the body of the HTTP request
:param dict headers: HTTP Headers to send with the request
:param tuple auth: Basic Auth arguments
:param float timeout: Socket/Read timeout for the request
:param boolean allow_redirects: Whether or not to allow redirects
See the requests documentation for explanation of all these parameters

:return: An http response
:rtype: A :class:`Response <twilio.rest.http.response.Response>` object