'Makes a request to the Twilio API using the configured http client
Authentication information is automatically added if none is provided
:param str method: HTTP Method
:param str uri: Fully qualified url
:param dict[str, str] params: Query string parameters
:param dict[str, str] data: POST body data
:param dict[str, str] headers: HTTP Headers
:param tuple(str, str) auth: Authentication
:param int timeout: Timeout in seconds
:param bool allow_redirects: Should the client follow redirects
:returns: Response from the Twilio API
:rtype: twilio.http.response.Response'

def request(self, method, uri, params=None, data=None, headers=None, auth=None, timeout=None, allow_redirects=False):

    auth = (auth or self.auth)
    headers = (headers or {})
    headers['User-Agent'] = 'twilio-python/{}    (Python    {})'.format(__version__, platform.python_version())
    headers['X-Twilio-Client'] = 'python-{}'.format(__version__)
    headers['Accept-Charset'] = 'utf-8'
    if ((method == 'POST') and ('Content-Type' not in headers)):
        headers['Content-Type'] = 'application/x-www-form-urlencoded'
    if ('Accept' not in headers):
        headers['Accept'] = 'application/json'
    if self.region:
        (head, tail) = uri.split('.', 1)
        if (not tail.startswith(self.region)):
            uri = '.'.join([head, self.region, tail])
    return self.http_client.request(method, uri, params=params, data=data, headers=headers, auth=auth, timeout=timeout, allow_redirects=allow_redirects)
