'Constructs and sends a :class:`Request <Request>`.
Returns :class:`Response <Response>` object.
:param method: method for the new :class:`Request` object.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`.
:param data: (optional) Dictionary or bytes to send in the body of the :class:`Request`.
:param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
:param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
:param files: (optional) Dictionary of \'filename\': file-like-objects for multipart encoding upload.
:param auth: (optional) Auth tuple or callable to enable Basic/Digest/Custom HTTP Auth.
:param timeout: (optional) Float describing the timeout of the request.
:param allow_redirects: (optional) Boolean. Set to True by default.
:param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.
:param return_response: (optional) If False, an un-sent Request object will returned.
:param config: (optional) A configuration dictionary. See ``request.defaults`` for allowed keys and their default values.
:param prefetch: (optional) whether to immediately download the response content. Defaults to ``True``.
:param verify: (optional) if ``True``, the SSL cert will be verified. A CA_BUNDLE path can also be provided.
:param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, (\'cert\', \'key\') pair.'

def request(self, method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None, return_response=True, config=None, prefetch=None, verify=None, cert=None):

    method = str(method).upper()
    data = ([] if (data is None) else data)
    files = ([] if (files is None) else files)
    headers = ({} if (headers is None) else headers)
    params = ({} if (params is None) else params)
    hooks = ({} if (hooks is None) else hooks)
    prefetch = (prefetch if (prefetch is not None) else self.prefetch)
    for (key, cb) in list(self.hooks.items()):
        hooks.setdefault(key, cb)
    if headers:
        for (k, v) in list((headers.items() or {})):
            headers[k] = header_expand(v)
    args = dict(method=method, url=url, data=data, params=from_key_val_list(params), headers=from_key_val_list(headers), cookies=cookies, files=files, auth=auth, hooks=from_key_val_list(hooks), timeout=timeout, allow_redirects=allow_redirects, proxies=from_key_val_list(proxies), config=from_key_val_list(config), prefetch=prefetch, verify=verify, cert=cert, _poolmanager=self.poolmanager)
    dead_cookies = None
    if (not isinstance(cookies, cookielib.CookieJar)):
        args['cookies'] = cookiejar_from_dict(cookies)
        if (cookies is not None):
            dead_cookies = [name for name in cookies if (cookies[name] is None)]
    for cookie in self.cookies:
        args['cookies'].set_cookie(cookie)
    if (dead_cookies is not None):
        for name in dead_cookies:
            remove_cookie_by_name(args['cookies'], name)
    for attr in self.__attrs__:
        if (attr == 'cookies'):
            continue
        session_val = getattr(self, attr, None)
        local_val = args.get(attr)
        args[attr] = merge_kwargs(local_val, session_val)
    args = dispatch_hook('args', args['hooks'], args)
    r = Request(**args)
    r.session = self
    if (not return_response):
        return r
    r.send(prefetch=prefetch)
    return r.response
