def METHOD_NAME(
    self,
    method,
    url,
    params=None,
    data=None,
    headers=None,
    auth=None,
    timeout=None,
    allow_redirects=False,
):
    """
    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
    """
    session = self.session or Session()
    METHOD_NAME = Request(
        method.upper(), url, params=params, data=data, headers=headers, auth=auth
    )
    prepared_request = session.prepare_request(METHOD_NAME)
    if (
        "Host" not in prepared_request.headers
        and "host" not in prepared_request.headers
    ):
        prepared_request.headers["Host"] = self._get_host(prepared_request)
    validation_payload = self._build_validation_payload(prepared_request)
    jwt = ClientValidationJwt(
        self.account_sid,
        self.api_key_sid,
        self.credential_sid,
        self.private_key,
        validation_payload,
    )
    prepared_request.headers["Twilio-Client-Validation"] = jwt.to_jwt()
    response = session.send(
        prepared_request,
        allow_redirects=allow_redirects,
        timeout=timeout,
    )
    return Response(int(response.status_code), response.text)