<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def request( self, method, url, timeout=None, headers=None, data=None, params=None ):
 """ 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 """

        if headers is None:
            headers = {}
        if not self.session:
            self._browser_init()

        try:
            response = self.session.request(
                method,
                url,
                timeout=timeout,
                allow_redirects=self._handle_redirect,
                headers=headers,
                data=data,
                params=params
            )
        except SSLError as e:
            raise WEBConnectException(e)
        except HTTPError:
            raise WEBConnectException("Unable to load {}".format(url))
        except (Timeout, socket.timeout):
            raise WEBConnectException("Timeout loading {}".format(url))
        except ConnectionError:
            raise WEBConnectException("Failed to load {}".format(url))
        except Exception:
            self.exception("Failed to load {}".format(url))
            raise WEBConnectException(
                "Unknown failure loading {}".format(url)
            )
        return response