def METHOD_NAME(self, captchaType, url, siteKey, captchaParams):
    taskID = None
    if not captchaParams.get('clientKey'):
        raise CaptchaParameter(
            "CapMonster: Missing clientKey parameter."
        )
    self.clientKey = captchaParams.get('clientKey')
    if captchaParams.get('proxy') and not captchaParams.get('no_proxy'):
        hostParsed = urlparse(captchaParams.get('proxy', {}).get('https'))
        if not hostParsed.scheme:
            raise CaptchaParameter('Cannot parse proxy correctly, bad scheme')
        if not hostParsed.netloc:
            raise CaptchaParameter('Cannot parse proxy correctly, bad netloc')
        ports = {
            'http': 80,
            'https': 443
        }
        self.proxy = {
            'proxyType': hostParsed.scheme,
            'proxyAddress': hostParsed.hostname,
            'proxyPort': hostParsed.port if hostParsed.port else ports[self.proxy['proxyType']],
            'proxyLogin': hostParsed.username,
            'proxyPassword': hostParsed.password,
        }
    else:
        self.proxy = None
    try:
        taskID = self.requestSolve(captchaType, url, siteKey)
        return self.requestJob(taskID)
    except polling2.TimeoutException:
        try:
            if taskID:
                self.reportJob(taskID)
        except polling2.TimeoutException:
            raise CaptchaTimeout(
                "CapMonster: Captcha solve took to long and also failed "
                f"reporting the task with task id {taskID}."
            )
        raise CaptchaTimeout(
            "CapMonster: Captcha solve took to long to execute "
            f"task id {taskID}, aborting."
        )