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

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