コード例 #1
0
        private async Task <CaptchaResponse> Solve(CaptchaService service, CaptchaType captchaType)
        {
            var proxy = MakeProxy(Proxy, ProxyType);

            switch (captchaType)
            {
            case CaptchaType.TextCaptcha:
                var textOptions = new TextCaptchaOptions()
                {
                    CaptchaLanguageGroup = CaptchaLanguageGroup,
                    CaptchaLanguage      = CaptchaLanguage
                };
                return(await service.SolveTextCaptchaAsync(Text, textOptions));

            case CaptchaType.ImageCaptcha:
                if (CaptchaImage == null)
                {
                    throw new ArgumentNullException("You must download an image first!");
                }

                var imageOptions = new ImageCaptchaOptions()
                {
                    IsPhrase             = IsPhrase,
                    CaseSensitive        = CaseSensitive,
                    CharacterSet         = CharacterSet,
                    RequiresCalculation  = RequiresCalculation,
                    MinLength            = int.Parse(MinLength),
                    MaxLength            = int.Parse(MaxLength),
                    CaptchaLanguageGroup = CaptchaLanguageGroup,
                    CaptchaLanguage      = CaptchaLanguage,
                    TextInstructions     = TextInstructions
                };
                return(await service.SolveImageCaptchaAsync(CaptchaImage.ToBase64(ImageFormat.Jpeg), imageOptions));

            case CaptchaType.ReCaptchaV2:
                return(await service.SolveRecaptchaV2Async(SiteKey, SiteUrl, SData, Enterprise, Invisible, proxy));

            case CaptchaType.ReCaptchaV3:
                return(await service.SolveRecaptchaV3Async(SiteKey, SiteUrl, Action,
                                                           float.Parse(MinScore, CultureInfo.InvariantCulture), Enterprise, proxy));

            case CaptchaType.FunCaptcha:
                return(await service.SolveFuncaptchaAsync(PublicKey, ServiceUrl, SiteUrl, NoJS, proxy));

            case CaptchaType.HCaptcha:
                return(await service.SolveHCaptchaAsync(SiteKey, SiteUrl, proxy));

            case CaptchaType.KeyCaptcha:
                return(await service.SolveKeyCaptchaAsync(UserId, SessionId, WebServerSign1, WebServerSign2,
                                                          SiteUrl, proxy));

            case CaptchaType.GeeTest:
                return(await service.SolveGeeTestAsync(GT, Challenge, ApiServer, SiteUrl, proxy));

            case CaptchaType.Capy:
                return(await service.SolveCapyAsync(SiteKey, SiteUrl, proxy));
            }

            throw new NotSupportedException($"Captcha type {captchaType} is not supported by the tester yet!");
        }
コード例 #2
0
        /// <inheritdoc/>
        public async override Task <StringResponse> SolveImageCaptchaAsync
            (string base64, ImageCaptchaOptions options = null, CancellationToken cancellationToken = default)
        {
            var content = GetAuthPair()
                          .Add("function", "picture2")
                          .Add("pict_type", 0)
                          .Add("lang", options.CaptchaLanguage.ToISO6391Code())
                          .ToMultipartFormDataContent();

            var buffer = Convert.FromBase64String(base64);

            content.Add(new ByteArrayContent(buffer), "pict");

            var response = await httpClient.PostMultipartToStringAsync("",
                                                                       content,
                                                                       cancellationToken)
                           .ConfigureAwait(false);

            if (DeCaptcherResponse.TryParse(response, out DeCaptcherResponse resp))
            {
                return new StringResponse {
                           Id = GetCaptchaId(resp), Response = resp.Text
                }
            }
            ;

            throw new TaskSolutionException(response);
        }
コード例 #3
0
        /// <inheritdoc/>
        public async override Task <StringResponse> SolveImageCaptchaAsync
            (string base64, ImageCaptchaOptions options = null, CancellationToken cancellationToken = default)
        {
            var response = await httpClient.PostAsync
                               ("captcha",
                               GetAuthPair()
                               .Add("captchafile", $"base64:{base64}")
                               .ToMultipartFormDataContent(),
                               cancellationToken);

            return(await TryGetResult(HttpUtility.ParseQueryString(await DecodeIsoResponse(response)),
                                      CaptchaType.ImageCaptcha, cancellationToken) as StringResponse);
        }
コード例 #4
0
        /// <inheritdoc/>
        public async override Task <StringResponse> SolveImageCaptchaAsync
            (string base64, ImageCaptchaOptions options = null, CancellationToken cancellationToken = default)
        {
            var response = await httpClient.PostToStringAsync
                               ("in.php",
                               new StringPairCollection()
                               .Add("key", ApiKey)
                               .Add("method", "base64")
                               .Add("body", base64)
                               .Add(ConvertCapabilities(options)),
                               cancellationToken)
                           .ConfigureAwait(false);

            return((await TryGetResult(response, CaptchaType.ImageCaptcha, cancellationToken).ConfigureAwait(false)) as StringResponse);
        }
コード例 #5
0
        public async override Task <StringResponse> SolveImageCaptchaAsync
            (string base64, ImageCaptchaOptions options = null, CancellationToken cancellationToken = default)
        {
            var content = new JObject();

            content.Add("userid", UserId);
            content.Add("apikey", ApiKey);
            content.Add("data", base64);

            var response = await httpClient.PostJsonToStringAsync
                               ("one/gettext",
                               content,
                               cancellationToken, false)
                           .ConfigureAwait(false);

            var jObject = JObject.Parse(response);

            return(new StringResponse {
                Id = 0, Response = jObject["result"].ToString()
            });
        }
コード例 #6
0
        /// <inheritdoc/>
        public async override Task <StringResponse> SolveImageCaptchaAsync
            (string base64, ImageCaptchaOptions options = null, CancellationToken cancellationToken = default)
        {
            var response = await httpClient.PostMultipartToStringAsync
                               ("index.cgi",
                               GetAuthPair()
                               .Add("action", "usercaptchaupload")
                               .Add("file-upload-01", base64)
                               .Add("base64", 1)
                               .Add(ConvertCapabilities(options))
                               .ToMultipartFormDataContent(),
                               cancellationToken)
                           .ConfigureAwait(false);

            if (IsError(response))
            {
                throw new TaskSolutionException(GetErrorMessage(response));
            }

            return(await TryGetResult(response, CaptchaType.ImageCaptcha, cancellationToken).ConfigureAwait(false) as StringResponse);
        }
コード例 #7
0
        protected async Task ImageCaptchaTest()
        {
            var options = new ImageCaptchaOptions
            {
                IsPhrase             = true,
                CaseSensitive        = true,
                CharacterSet         = CharacterSet.NotSpecified,
                RequiresCalculation  = false,
                MinLength            = 0,
                MaxLength            = 0,
                CaptchaLanguageGroup = CaptchaLanguageGroup.NotSpecified,
                CaptchaLanguage      = CaptchaLanguage.NotSpecified,
                TextInstructions     = ""
            };

            var solution = await Service.SolveImageCaptchaAsync(
                base64 : "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",
                options);

            Assert.Equal("w68hp", solution.Response.Replace(" ", "").ToLower());
        }
コード例 #8
0
        /// <inheritdoc/>
        public async override Task <StringResponse> SolveImageCaptchaAsync
            (string base64, ImageCaptchaOptions options = null, CancellationToken cancellationToken = default)
        {
            var response = await httpClient.PostJsonToStringAsync
                               ("createTask",
                               AddImageCapabilities(
                                   new CaptchaTaskRequest
            {
                ClientKey = ApiKey,
                SoftId = SoftId,
                Task = new ImageCaptchaTask
                {
                    Body = base64
                }
            }, options),
                               cancellationToken)
                           .ConfigureAwait(false);

            return(await TryGetResult(response.Deserialize <TaskCreationResponse>(), CaptchaType.ImageCaptcha, cancellationToken)
                   as StringResponse);
        }
コード例 #9
0
        /// <inheritdoc/>
        public async override Task <StringResponse> SolveImageCaptchaAsync
            (string base64, ImageCaptchaOptions options = null, CancellationToken cancellationToken = default)
        {
            var response = await httpClient.PostMultipartToStringAsync
                               ("in.php",
                               new StringPairCollection()
                               .Add("key", ApiKey)
                               .Add("method", "base64")
                               .Add("body", base64)
                               .Add("soft_id", SoftId)
                               .Add("json", "1", UseJsonFlag)
                               .Add("header_acao", "1", AddACAOHeader)
                               .Add(ConvertCapabilities(options))
                               .ToMultipartFormDataContent(),
                               cancellationToken)
                           .ConfigureAwait(false);

            return((UseJsonFlag
                ? await TryGetResult(response.Deserialize <Response>(), CaptchaType.ImageCaptcha, cancellationToken).ConfigureAwait(false)
                : await TryGetResult(response, CaptchaType.ImageCaptcha, cancellationToken).ConfigureAwait(false)
                    ) as StringResponse);
        }
コード例 #10
0
        /// <inheritdoc/>
        public async override Task <StringResponse> SolveImageCaptchaAsync
            (string base64, ImageCaptchaOptions options = null, CancellationToken cancellationToken = default)
        {
            var response = await httpClient.PostToStringAsync
                               ("Forms/UploadFileAndGetTextNEWToken.ashx",
                               GetAuthAffiliatePair()
                               .Add("action", "UPLOADCAPTCHA")
                               .Add("file", base64)
                               .Add(ConvertCapabilities(options)),
                               cancellationToken)
                           .ConfigureAwait(false);

            if (IsError(response))
            {
                throw new TaskSolutionException(GetErrorMessage(response));
            }

            var split = response.Split(new char[] { '|' }, 2);

            return(new StringResponse {
                Id = long.Parse(split[0]), Response = split[1]
            });
        }
コード例 #11
0
 /// <summary>Solves an image based captcha.</summary>
 ///
 /// <param name="base64">The captcha image encoded as a base64 string.</param>
 ///
 /// <param name="options">
 /// Any additional options like whether the captcha is case sensitive.
 /// If null they will be disregarded.
 /// </param>
 ///
 /// <param name="cancellationToken">A token that can be used to cancel the async task.</param>
 ///
 /// /// <returns>
 /// A <see cref="StringResponse"/> containing the captcha id to be used with
 /// <see cref="ReportSolution(long, CaptchaType, bool, CancellationToken)"/> and the
 /// captcha solution as plaintext.
 /// </returns>
 ///
 /// <exception cref="TaskCreationException"></exception>
 /// <exception cref="TaskSolutionException"></exception>
 /// <exception cref="TimeoutException"></exception>
 public virtual Task <StringResponse> SolveImageCaptchaAsync
     (string base64, ImageCaptchaOptions options = null, CancellationToken cancellationToken = default)
 {
     throw new NotSupportedException();
 }