def request(<EOL>self, method, url, timeout=None,<EOL>headers=None, data=None, params=None<EOL>):
if headers is None:<EOL><INDENT>headers = {}<EOL><DEDENT>if not self.session:<EOL><INDENT>self._browser_init()<EOL><DEDENT>try:<EOL><INDENT>response = self.session.request(<EOL>method,<EOL>url,<EOL>timeout=timeout,<EOL>allow_redirects=self._handle_redirect,<EOL>headers=headers,<EOL>data=data,<EOL>params=params<EOL>)<EOL><DEDENT>except SSLError as e:<EOL><INDENT>raise WEBConnectException(e)<EOL><DEDENT>except HTTPError:<EOL><INDENT>raise WEBConnectException("<STR_LIT>".format(url))<EOL><DEDENT>except (Timeout, socket.timeout):<EOL><INDENT>raise WEBConnectException("<STR_LIT>".format(url))<EOL><DEDENT>except ConnectionError:<EOL><INDENT>raise WEBConnectException("<STR_LIT>".format(url))<EOL><DEDENT>except Exception:<EOL><INDENT>self.exception("<STR_LIT>".format(url))<EOL>raise WEBConnectException(<EOL>"<STR_LIT>".format(url)<EOL>)<EOL><DEDENT>return response<EOL>
Make a request using the requests library

:param method: Which http method to use (GET/POST)
:type method: str | unicode
:param url: Url to make request to
:type url: str | unicode
:param timeout: Timeout for request (default: None)
    None -> infinite timeout
:type timeout: None | int | float
:param headers: Headers to be passed along (default: None)
:type headers: None | dict
:param data: Data to be passed along (e.g. body in POST)
    (default: None)
:type data: None | dict
:param params: Parameters to be passed along (e.g. with url in GET)
    (default: None)
:type params: None | dict
:return: Response to the request
:rtype: requests.Response
:raises WEBConnectException: Loading failed