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!"); }
protected async Task TextCaptchaTest() { var options = new TextCaptchaOptions { CaptchaLanguageGroup = CaptchaLanguageGroup.NotSpecified, CaptchaLanguage = CaptchaLanguage.NotSpecified }; var solution = await Service.SolveTextCaptchaAsync( text : "What is 2+2?", options); Assert.Equal("4", solution.Response); }
/// <inheritdoc/> public async override Task <StringResponse> SolveTextCaptchaAsync (string text, TextCaptchaOptions options = default, CancellationToken cancellationToken = default) { var response = await httpClient.PostMultipartToStringAsync ("index.cgi", GetAuthPair() .Add("action", "usercaptchaupload") .Add("file-upload-01", text) .Add("textonly", 1) .ToMultipartFormDataContent(), cancellationToken) .ConfigureAwait(false); if (IsError(response)) { throw new TaskSolutionException(GetErrorMessage(response)); } return(await TryGetResult(response, CaptchaType.TextCaptcha, cancellationToken).ConfigureAwait(false) as StringResponse); }
/// <inheritdoc/> public async override Task <StringResponse> SolveTextCaptchaAsync (string text, TextCaptchaOptions options = default, CancellationToken cancellationToken = default) { var response = await httpClient.PostMultipartToStringAsync ("in.php", new StringPairCollection() .Add("key", ApiKey) .Add("textcaptcha", text) .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.TextCaptcha, cancellationToken).ConfigureAwait(false) : await TryGetResult(response, CaptchaType.TextCaptcha, cancellationToken).ConfigureAwait(false) ) as StringResponse); }
/// <inheritdoc/> public async override Task <StringResponse> SolveTextCaptchaAsync (string text, TextCaptchaOptions options = null, CancellationToken cancellationToken = default) { var response = await httpClient.PostMultipartToStringAsync("", GetAuthPair() .Add("function", "picture2") .Add("pict", text) .Add("pict_type", 83) .Add("lang", options.CaptchaLanguage.ToISO6391Code()) .ToMultipartFormDataContent(), cancellationToken) .ConfigureAwait(false); if (DeCaptcherResponse.TryParse(response, out DeCaptcherResponse resp)) { return new StringResponse { Id = GetCaptchaId(resp), Response = resp.Text } } ; throw new TaskSolutionException(response); }
/// <summary>Solves a text based captcha.</summary> /// /// <param name="text">The captcha question.</param> /// /// <param name="options"> /// Any additional options like the language of the question. /// 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> SolveTextCaptchaAsync (string text, TextCaptchaOptions options = null, CancellationToken cancellationToken = default) { throw new NotSupportedException(); }