From 39c989a98d8e2118ff37fe93620a6b9a778f896c Mon Sep 17 00:00:00 2001 From: victorkowalski Date: Tue, 28 Oct 2025 11:17:26 +0300 Subject: [PATCH 1/8] VkImage captcha --- TwoCaptcha.Examples/Run.cs | 4 ++ .../TwoCaptcha.Examples.csproj | 8 +++- TwoCaptcha.Examples/VkImageExample.cs | 33 ++++++++++++++ TwoCaptcha.Examples/resources/vk.jpg | Bin 0 -> 32255 bytes TwoCaptcha/Captcha/VkImage.cs | 41 ++++++++++++++++++ 5 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 TwoCaptcha.Examples/VkImageExample.cs create mode 100644 TwoCaptcha.Examples/resources/vk.jpg create mode 100644 TwoCaptcha/Captcha/VkImage.cs diff --git a/TwoCaptcha.Examples/Run.cs b/TwoCaptcha.Examples/Run.cs index c190662..06543c2 100644 --- a/TwoCaptcha.Examples/Run.cs +++ b/TwoCaptcha.Examples/Run.cs @@ -198,6 +198,10 @@ public static void Main(string[] args) case "YandexOptionsExample": YandexOptionsExample YandexOptionsExample = new YandexOptionsExample(apiKey); break; + + case "VkImageExample": + VkImageExample VkImageExample = new VkImageExample(apiKey); + break; } } } diff --git a/TwoCaptcha.Examples/TwoCaptcha.Examples.csproj b/TwoCaptcha.Examples/TwoCaptcha.Examples.csproj index 08a4b39..442d461 100644 --- a/TwoCaptcha.Examples/TwoCaptcha.Examples.csproj +++ b/TwoCaptcha.Examples/TwoCaptcha.Examples.csproj @@ -1,4 +1,4 @@ - + netcoreapp3.1;net5.0;net6.0;net7.0 @@ -81,5 +81,11 @@ PreserveNewest + + + + PreserveNewest + + \ No newline at end of file diff --git a/TwoCaptcha.Examples/VkImageExample.cs b/TwoCaptcha.Examples/VkImageExample.cs new file mode 100644 index 0000000..afc1d89 --- /dev/null +++ b/TwoCaptcha.Examples/VkImageExample.cs @@ -0,0 +1,33 @@ +using System; +using System.IO; +using System.Linq; +using TwoCaptcha.Captcha; + +namespace TwoCaptcha.Examples +{ + public class VkImageExample + { + public VkImageExample(string apiKey) + { + TwoCaptcha solver = new TwoCaptcha(apiKey); + + byte[] bytes = File.ReadAllBytes("resources/vk.jpg"); + string base64EncodedImage = Convert.ToBase64String(bytes); + Console.WriteLine("base64EncodedImage: " + base64EncodedImage); + + + VkImage captcha = new VkImage(); + captcha.SetBase64(base64EncodedImage); + + try + { + solver.Solve(captcha).Wait(); + Console.WriteLine("Captcha solved: " + captcha.Code); + } + catch (AggregateException e) + { + Console.WriteLine("Error occurred: " + e.InnerExceptions.First().Message); + } + } + } +} \ No newline at end of file diff --git a/TwoCaptcha.Examples/resources/vk.jpg b/TwoCaptcha.Examples/resources/vk.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91809ec9bf5e57554a24455857adcabab70e9ecf GIT binary patch literal 32255 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 B???au literal 0 HcmV?d00001 diff --git a/TwoCaptcha/Captcha/VkImage.cs b/TwoCaptcha/Captcha/VkImage.cs new file mode 100644 index 0000000..e947c8d --- /dev/null +++ b/TwoCaptcha/Captcha/VkImage.cs @@ -0,0 +1,41 @@ +using System; +using System.Buffers.Text; +using System.Collections.Generic; +using System.IO; + +namespace TwoCaptcha.Captcha +{ + public class VkImage : Captcha + { + public VkImage() : base() + { + parameters["method"] = "vkimage"; + } + + public void SetSteps(String steps) + { + parameters["steps"] = steps; + } + + public void SetBase64(String base64) + { + parameters["body"] = base64; + } + + public void SetRedirectUri(String redirect_uri) + { + parameters["redirect_uri"] = redirect_uri; + } + + public void SetuserAgent(String userAgent) + { + parameters["userAgent"] = userAgent; + } + } +} + + + + + + From 50fd9d330d8699d6541cdb167815342b8758d32a Mon Sep 17 00:00:00 2001 From: victorkowalski Date: Tue, 28 Oct 2025 11:53:52 +0300 Subject: [PATCH 2/8] SetSteps --- TwoCaptcha.Examples/VkImageExample.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/TwoCaptcha.Examples/VkImageExample.cs b/TwoCaptcha.Examples/VkImageExample.cs index afc1d89..9087dff 100644 --- a/TwoCaptcha.Examples/VkImageExample.cs +++ b/TwoCaptcha.Examples/VkImageExample.cs @@ -18,6 +18,7 @@ public VkImageExample(string apiKey) VkImage captcha = new VkImage(); captcha.SetBase64(base64EncodedImage); + captcha.SetSteps("[5,12,22,24,21,23,10,7,2,8,19,18,8,24,21,22,11,14,16,5,18,20,4,21,12,6,0,0,11,12,8,20,19,3,14,8,9,13,16,24,18,3,2,23,8,12,6,1,11,0,20,15,19,22,17,24,8,0,12,5,19,14,11,6,7,14,23,24,23,20,4,20,6,12,4,17,4,18,6,20,17,5,23,7,10,2,8,9,5,4,17,24,11,14,4,10,12,22,21,2]"); try { From 124ac51bbb41a9102a6bffb4e0da0ebfbc3abe79 Mon Sep 17 00:00:00 2001 From: victorkowalski Date: Tue, 28 Oct 2025 11:59:56 +0300 Subject: [PATCH 3/8] readme updated --- README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/README.md b/README.md index 4971f23..401fdb7 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ Examples of API requests for different captcha types are available on the [C# ca - [DataDome](#datadome) - [atbCAPTCHA](#atbcaptcha) - [Tencent](#tencent) + - [VK Image](#vk-image) - [Other methods](#other-methods) - [send / getResult](#send--getresult) - [balance](#balance) @@ -488,6 +489,27 @@ tencent.SetAppId("190014885"); tencent.SetPageUrl("https://www.example.com/"); ``` +### VK Image + +[API method description.](https://2captcha.com/2captcha-api#vkcaptcha) + +We offer two methods to solve this type of captcha - token-based and image-based. + +We use the body (image in base64 format) or file (image as file) and steps parameters. +You can get both values from the response to the request https://api.vk.com/method/captchaNotRobot.getContent?v={API_VER} when loading the captcha widget on the page. + +```csharp +TwoCaptcha solver = new TwoCaptcha(apiKey); + +byte[] bytes = File.ReadAllBytes("resources/vk.jpg"); +string base64EncodedImage = Convert.ToBase64String(bytes); + +VkImage captcha = new VkImage(); +captcha.SetBase64(base64EncodedImage); +captcha.SetSteps("[5,12,22,24,21,23,10,7,2,8,19,18,8,24,21,22,11,14,16,5,18,20,4,21,12,6,0,0,11,12,8,20,19,3,14,8,9,13,16,24,18,3,2,23,8,12,6,1,11,0,20,15,19,22,17,24,8,0,12,5,19,14,11,6,7,14,23,24,23,20,4,20,6,12,4,17,4,18,6,20,17,5,23,7,10,2,8,9,5,4,17,24,11,14,4,10,12,22,21,2]"); + +``` + ## Other methods From 95952290359672bf4111296309f9d57c9dc41cdb Mon Sep 17 00:00:00 2001 From: victorkowalski Date: Wed, 29 Oct 2025 09:20:15 +0300 Subject: [PATCH 4/8] vk example --- TwoCaptcha.Examples/Run.cs | 4 +- TwoCaptcha.Examples/VkExample.cs | 60 ++++++++++++++++++ TwoCaptcha.Examples/VkImageExample.cs | 34 ---------- TwoCaptcha.Tests/VkTest.cs | 33 ++++++++++ TwoCaptcha.Tests/resources/vk.jpg | Bin 0 -> 32255 bytes .../Captcha/{VkImage.cs => VkCaptcha.cs} | 6 +- 6 files changed, 98 insertions(+), 39 deletions(-) create mode 100644 TwoCaptcha.Examples/VkExample.cs delete mode 100644 TwoCaptcha.Examples/VkImageExample.cs create mode 100644 TwoCaptcha.Tests/VkTest.cs create mode 100644 TwoCaptcha.Tests/resources/vk.jpg rename TwoCaptcha/Captcha/{VkImage.cs => VkCaptcha.cs} (83%) diff --git a/TwoCaptcha.Examples/Run.cs b/TwoCaptcha.Examples/Run.cs index 06543c2..07b2bbf 100644 --- a/TwoCaptcha.Examples/Run.cs +++ b/TwoCaptcha.Examples/Run.cs @@ -199,8 +199,8 @@ public static void Main(string[] args) YandexOptionsExample YandexOptionsExample = new YandexOptionsExample(apiKey); break; - case "VkImageExample": - VkImageExample VkImageExample = new VkImageExample(apiKey); + case "VkExample": + VkExample VkExample = new VkExample(apiKey); break; } } diff --git a/TwoCaptcha.Examples/VkExample.cs b/TwoCaptcha.Examples/VkExample.cs new file mode 100644 index 0000000..4bf03f0 --- /dev/null +++ b/TwoCaptcha.Examples/VkExample.cs @@ -0,0 +1,60 @@ +using System; +using System.IO; +using System.Linq; +using TwoCaptcha.Captcha; +using static System.Net.Mime.MediaTypeNames; + +namespace TwoCaptcha.Examples +{ + public class VkExample + { + public VkExample(string apiKey) + { + VkImageExample(apiKey); + //VkCaptchaExample(apiKey); + } + + private void VkImageExample(string apiKey) + { + TwoCaptcha solver = new TwoCaptcha(apiKey); + + byte[] bytes = File.ReadAllBytes("resources/vk.jpg"); + string base64EncodedImage = Convert.ToBase64String(bytes); + + VkCaptcha captcha = new VkCaptcha("vkimage"); + captcha.SetBase64(base64EncodedImage); + captcha.SetSteps("[5,12,22,24,21,23,10,7,2,8,19,18,8,24,21,22,11,14,16,5,18,20,4,21,12,6,0,0,11,12,8,20,19,3,14,8,9,13,16,24,18,3,2,23,8,12,6,1,11,0,20,15,19,22,17,24,8,0,12,5,19,14,11,6,7,14,23,24,23,20,4,20,6,12,4,17,4,18,6,20,17,5,23,7,10,2,8,9,5,4,17,24,11,14,4,10,12,22,21,2]"); + + try + { + solver.Solve(captcha).Wait(); + Console.WriteLine("Captcha solved: " + captcha.Code); + } + catch (AggregateException e) + { + Console.WriteLine("Error occurred: " + e.InnerExceptions.First().Message); + } + } + + /* + private void VkCaptchaExample(string apiKey) + { + TwoCaptcha solver = new TwoCaptcha(apiKey); + + VkCaptcha captcha = new VkCaptcha("vkcaptcha"); + + captcha.SetRedirectUri("https://id.vk.com/not_robot_captcha?domain=vk.com&session_token=eyJ....HGsc5B4LyvjA&variant=popup&blank=1"); + captcha.SetuserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"); + captcha.SetProxy("http", "1.2.3.4"); + try + { + solver.Solve(captcha).Wait(); + Console.WriteLine("Captcha solved: " + captcha.Code); + } + catch (AggregateException e) + { + Console.WriteLine("Error occurred: " + e.InnerExceptions.First().Message); + } + }*/ + } +} \ No newline at end of file diff --git a/TwoCaptcha.Examples/VkImageExample.cs b/TwoCaptcha.Examples/VkImageExample.cs deleted file mode 100644 index 9087dff..0000000 --- a/TwoCaptcha.Examples/VkImageExample.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using TwoCaptcha.Captcha; - -namespace TwoCaptcha.Examples -{ - public class VkImageExample - { - public VkImageExample(string apiKey) - { - TwoCaptcha solver = new TwoCaptcha(apiKey); - - byte[] bytes = File.ReadAllBytes("resources/vk.jpg"); - string base64EncodedImage = Convert.ToBase64String(bytes); - Console.WriteLine("base64EncodedImage: " + base64EncodedImage); - - - VkImage captcha = new VkImage(); - captcha.SetBase64(base64EncodedImage); - captcha.SetSteps("[5,12,22,24,21,23,10,7,2,8,19,18,8,24,21,22,11,14,16,5,18,20,4,21,12,6,0,0,11,12,8,20,19,3,14,8,9,13,16,24,18,3,2,23,8,12,6,1,11,0,20,15,19,22,17,24,8,0,12,5,19,14,11,6,7,14,23,24,23,20,4,20,6,12,4,17,4,18,6,20,17,5,23,7,10,2,8,9,5,4,17,24,11,14,4,10,12,22,21,2]"); - - try - { - solver.Solve(captcha).Wait(); - Console.WriteLine("Captcha solved: " + captcha.Code); - } - catch (AggregateException e) - { - Console.WriteLine("Error occurred: " + e.InnerExceptions.First().Message); - } - } - } -} \ No newline at end of file diff --git a/TwoCaptcha.Tests/VkTest.cs b/TwoCaptcha.Tests/VkTest.cs new file mode 100644 index 0000000..e8ac0c6 --- /dev/null +++ b/TwoCaptcha.Tests/VkTest.cs @@ -0,0 +1,33 @@ +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using TwoCaptcha.Captcha; +using static System.Net.Mime.MediaTypeNames; + +namespace TwoCaptcha.Tests +{ + [TestFixture] + public class VkTest : AbstractWrapperTestCase + { + [Test] + public async Task TestAllParameters() + { + byte[] bytes = File.ReadAllBytes("../../../resources/vk.jpg"); + string base64EncodedImage = Convert.ToBase64String(bytes); + + VkCaptcha captcha = new VkCaptcha("vkimage"); + captcha.SetBase64(base64EncodedImage); + captcha.SetSteps("[5,12,22,24,21,23,10,7,2,8,19,18,8,24,21,22,11,14,16,5,18,20,4,21,12,6,0,0,11,12,8,20,19,3,14,8,9,13,16,24,18,3,2,23,8,12,6,1,11,0,20,15,19,22,17,24,8,0,12,5,19,14,11,6,7,14,23,24,23,20,4,20,6,12,4,17,4,18,6,20,17,5,23,7,10,2,8,9,5,4,17,24,11,14,4,10,12,22,21,2]"); + + var parameters = new Dictionary(); + parameters["method"] = "vkimage"; + parameters["steps"] = "[5,12,22,24,21,23,10,7,2,8,19,18,8,24,21,22,11,14,16,5,18,20,4,21,12,6,0,0,11,12,8,20,19,3,14,8,9,13,16,24,18,3,2,23,8,12,6,1,11,0,20,15,19,22,17,24,8,0,12,5,19,14,11,6,7,14,23,24,23,20,4,20,6,12,4,17,4,18,6,20,17,5,23,7,10,2,8,9,5,4,17,24,11,14,4,10,12,22,21,2]"; + parameters["body"] = base64EncodedImage; + parameters["soft_id"] = "4582"; + + await CheckIfCorrectParamsSendAndResultReturned(captcha, parameters); + } + } +} \ No newline at end of file diff --git a/TwoCaptcha.Tests/resources/vk.jpg b/TwoCaptcha.Tests/resources/vk.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91809ec9bf5e57554a24455857adcabab70e9ecf GIT binary patch literal 32255 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 B???au literal 0 HcmV?d00001 diff --git a/TwoCaptcha/Captcha/VkImage.cs b/TwoCaptcha/Captcha/VkCaptcha.cs similarity index 83% rename from TwoCaptcha/Captcha/VkImage.cs rename to TwoCaptcha/Captcha/VkCaptcha.cs index e947c8d..5c5fdec 100644 --- a/TwoCaptcha/Captcha/VkImage.cs +++ b/TwoCaptcha/Captcha/VkCaptcha.cs @@ -5,11 +5,11 @@ namespace TwoCaptcha.Captcha { - public class VkImage : Captcha + public class VkCaptcha : Captcha { - public VkImage() : base() + public VkCaptcha(String method) : base() { - parameters["method"] = "vkimage"; + parameters["method"] = method; } public void SetSteps(String steps) From d8b7412390d5e00f9685aa4845babed2c6e84b25 Mon Sep 17 00:00:00 2001 From: victorkowalski Date: Wed, 29 Oct 2025 09:27:42 +0300 Subject: [PATCH 5/8] readme updated --- README.md | 18 +++++++++++++++++- TwoCaptcha.Examples/VkExample.cs | 6 +++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 401fdb7..5799c4a 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ Examples of API requests for different captcha types are available on the [C# ca - [atbCAPTCHA](#atbcaptcha) - [Tencent](#tencent) - [VK Image](#vk-image) + - [VK Captcha](#vk-captcha) - [Other methods](#other-methods) - [send / getResult](#send--getresult) - [balance](#balance) @@ -504,12 +505,27 @@ TwoCaptcha solver = new TwoCaptcha(apiKey); byte[] bytes = File.ReadAllBytes("resources/vk.jpg"); string base64EncodedImage = Convert.ToBase64String(bytes); -VkImage captcha = new VkImage(); +VkCaptcha captcha = new VkCaptcha("vkimage"); captcha.SetBase64(base64EncodedImage); captcha.SetSteps("[5,12,22,24,21,23,10,7,2,8,19,18,8,24,21,22,11,14,16,5,18,20,4,21,12,6,0,0,11,12,8,20,19,3,14,8,9,13,16,24,18,3,2,23,8,12,6,1,11,0,20,15,19,22,17,24,8,0,12,5,19,14,11,6,7,14,23,24,23,20,4,20,6,12,4,17,4,18,6,20,17,5,23,7,10,2,8,9,5,4,17,24,11,14,4,10,12,22,21,2]"); ``` +### VK Captcha + +[API method description.](https://2captcha.com/2captcha-api#vk-captcha) + +Token-based method requires redirect_uri parameter, as well as proxy and userAgent. The value of the redirect_uri parameter can be found in the response to requests to the VK API that return captchas. + +```csharp + +VkCaptcha captcha = new VkCaptcha("vkcaptcha"); + +captcha.SetRedirectUri("https://id.vk.com/not_robot_captcha?domain=vk.com&session_token=eyJ....HGsc5B4LyvjA&variant=popup&blank=1"); +captcha.SetuserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"); +captcha.SetProxy("http", "1.2.3.4"); +``` + ## Other methods diff --git a/TwoCaptcha.Examples/VkExample.cs b/TwoCaptcha.Examples/VkExample.cs index 4bf03f0..591ecf4 100644 --- a/TwoCaptcha.Examples/VkExample.cs +++ b/TwoCaptcha.Examples/VkExample.cs @@ -10,11 +10,11 @@ public class VkExample { public VkExample(string apiKey) { - VkImageExample(apiKey); + ImageBased(apiKey); //VkCaptchaExample(apiKey); } - private void VkImageExample(string apiKey) + private void ImageBased(string apiKey) { TwoCaptcha solver = new TwoCaptcha(apiKey); @@ -37,7 +37,7 @@ private void VkImageExample(string apiKey) } /* - private void VkCaptchaExample(string apiKey) + private void TokenBased(string apiKey) { TwoCaptcha solver = new TwoCaptcha(apiKey); From f711aebae94bc41d80eeb9e4e27003c756792c0e Mon Sep 17 00:00:00 2001 From: victorkowalski Date: Thu, 30 Oct 2025 13:35:01 +0300 Subject: [PATCH 6/8] setFile() --- TwoCaptcha/Captcha/VkCaptcha.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/TwoCaptcha/Captcha/VkCaptcha.cs b/TwoCaptcha/Captcha/VkCaptcha.cs index 5c5fdec..7fce9a0 100644 --- a/TwoCaptcha/Captcha/VkCaptcha.cs +++ b/TwoCaptcha/Captcha/VkCaptcha.cs @@ -31,6 +31,16 @@ public void SetuserAgent(String userAgent) { parameters["userAgent"] = userAgent; } + + public void SetFile(string filePath) + { + SetFile(new FileInfo(filePath)); + } + + public void SetFile(FileInfo file) + { + files["file"] = file; + } } } From 6c36e1a15a50e9caf067675ae54d02a307608631 Mon Sep 17 00:00:00 2001 From: victorkowalski Date: Fri, 7 Nov 2025 11:02:24 +0300 Subject: [PATCH 7/8] vk test --- TwoCaptcha.Examples/Run.cs | 8 +++-- TwoCaptcha.Examples/VkCaptchaExample.cs | 36 +++++++++++++++++++ .../{VkExample.cs => VkImageExample.cs} | 26 ++------------ TwoCaptcha.Tests/VkCaptchaTest.cs | 30 ++++++++++++++++ .../{VkTest.cs => VkImageTest.cs} | 2 +- TwoCaptcha/Captcha/Captcha.cs | 10 ++++++ 6 files changed, 85 insertions(+), 27 deletions(-) create mode 100644 TwoCaptcha.Examples/VkCaptchaExample.cs rename TwoCaptcha.Examples/{VkExample.cs => VkImageExample.cs} (55%) create mode 100644 TwoCaptcha.Tests/VkCaptchaTest.cs rename TwoCaptcha.Tests/{VkTest.cs => VkImageTest.cs} (96%) diff --git a/TwoCaptcha.Examples/Run.cs b/TwoCaptcha.Examples/Run.cs index 07b2bbf..a218289 100644 --- a/TwoCaptcha.Examples/Run.cs +++ b/TwoCaptcha.Examples/Run.cs @@ -199,8 +199,12 @@ public static void Main(string[] args) YandexOptionsExample YandexOptionsExample = new YandexOptionsExample(apiKey); break; - case "VkExample": - VkExample VkExample = new VkExample(apiKey); + case "VkImageExample": + VkImageExample VkImageExample = new VkImageExample(apiKey); + break; + + case "VkCaptchaExample": + VkCaptchaExample VkCaptchaExample = new VkCaptchaExample(apiKey); break; } } diff --git a/TwoCaptcha.Examples/VkCaptchaExample.cs b/TwoCaptcha.Examples/VkCaptchaExample.cs new file mode 100644 index 0000000..30d523e --- /dev/null +++ b/TwoCaptcha.Examples/VkCaptchaExample.cs @@ -0,0 +1,36 @@ +using System; +using System.IO; +using System.Linq; +using TwoCaptcha.Captcha; +using static System.Net.Mime.MediaTypeNames; + +namespace TwoCaptcha.Examples +{ + public class VkCaptchaExample + { + public VkCaptchaExample(string apiKey) + { + TokenBased(apiKey); + } + + private void TokenBased(string apiKey) + { + TwoCaptcha solver = new TwoCaptcha(apiKey); + + VkCaptcha captcha = new VkCaptcha("vkcaptcha"); + + captcha.SetRedirectUri("https://id.vk.com/not_robot_captcha?domain=vk.com&session_token=eyJ....HGsc5B4LyvjA&variant=popup&blank=1"); + captcha.SetuserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"); + captcha.SetProxy("http", "1.2.3.4"); + try + { + solver.Solve(captcha).Wait(); + Console.WriteLine("Captcha solved: " + captcha.Code); + } + catch (AggregateException e) + { + Console.WriteLine("Error occurred: " + e.InnerExceptions.First().Message); + } + } + } +} \ No newline at end of file diff --git a/TwoCaptcha.Examples/VkExample.cs b/TwoCaptcha.Examples/VkImageExample.cs similarity index 55% rename from TwoCaptcha.Examples/VkExample.cs rename to TwoCaptcha.Examples/VkImageExample.cs index 591ecf4..a29dc6b 100644 --- a/TwoCaptcha.Examples/VkExample.cs +++ b/TwoCaptcha.Examples/VkImageExample.cs @@ -6,12 +6,11 @@ namespace TwoCaptcha.Examples { - public class VkExample + public class VkImageExample { - public VkExample(string apiKey) + public VkImageExample(string apiKey) { ImageBased(apiKey); - //VkCaptchaExample(apiKey); } private void ImageBased(string apiKey) @@ -35,26 +34,5 @@ private void ImageBased(string apiKey) Console.WriteLine("Error occurred: " + e.InnerExceptions.First().Message); } } - - /* - private void TokenBased(string apiKey) - { - TwoCaptcha solver = new TwoCaptcha(apiKey); - - VkCaptcha captcha = new VkCaptcha("vkcaptcha"); - - captcha.SetRedirectUri("https://id.vk.com/not_robot_captcha?domain=vk.com&session_token=eyJ....HGsc5B4LyvjA&variant=popup&blank=1"); - captcha.SetuserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"); - captcha.SetProxy("http", "1.2.3.4"); - try - { - solver.Solve(captcha).Wait(); - Console.WriteLine("Captcha solved: " + captcha.Code); - } - catch (AggregateException e) - { - Console.WriteLine("Error occurred: " + e.InnerExceptions.First().Message); - } - }*/ } } \ No newline at end of file diff --git a/TwoCaptcha.Tests/VkCaptchaTest.cs b/TwoCaptcha.Tests/VkCaptchaTest.cs new file mode 100644 index 0000000..a57eadc --- /dev/null +++ b/TwoCaptcha.Tests/VkCaptchaTest.cs @@ -0,0 +1,30 @@ +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using TwoCaptcha.Captcha; +using static System.Net.Mime.MediaTypeNames; + +namespace TwoCaptcha.Tests +{ + [TestFixture] + public class VkCaptchaTest : AbstractWrapperTestCase + { + [Test] + public async Task TestAllParameters() + { + VkCaptcha captcha = new VkCaptcha("vkcaptcha"); + captcha.SetSiteKey("0x4AAAAAAAChNiVJM_WtShFf"); + captcha.SetUrl("https://ace.fusionist.io"); + + var parameters = new Dictionary(); + parameters["method"] = "vkcaptcha"; + parameters["soft_id"] = "4582"; + parameters["pageurl"] = "https://ace.fusionist.io"; + parameters["sitekey"] = "0x4AAAAAAAChNiVJM_WtShFf"; + + await CheckIfCorrectParamsSendAndResultReturned(captcha, parameters); + } + } +} \ No newline at end of file diff --git a/TwoCaptcha.Tests/VkTest.cs b/TwoCaptcha.Tests/VkImageTest.cs similarity index 96% rename from TwoCaptcha.Tests/VkTest.cs rename to TwoCaptcha.Tests/VkImageTest.cs index e8ac0c6..2a91d1f 100644 --- a/TwoCaptcha.Tests/VkTest.cs +++ b/TwoCaptcha.Tests/VkImageTest.cs @@ -9,7 +9,7 @@ namespace TwoCaptcha.Tests { [TestFixture] - public class VkTest : AbstractWrapperTestCase + public class VkImageTest : AbstractWrapperTestCase { [Test] public async Task TestAllParameters() diff --git a/TwoCaptcha/Captcha/Captcha.cs b/TwoCaptcha/Captcha/Captcha.cs index f075824..ee81ffd 100644 --- a/TwoCaptcha/Captcha/Captcha.cs +++ b/TwoCaptcha/Captcha/Captcha.cs @@ -57,5 +57,15 @@ public Dictionary GetFiles() { return new Dictionary(files); } + + public void SetSiteKey(String siteKey) + { + parameters["sitekey"] = siteKey; + } + + public void SetUrl(String url) + { + parameters["pageurl"] = url; + } } } \ No newline at end of file From 23b7a3ab3854e0793bb8247d4709c4cf8922b3dd Mon Sep 17 00:00:00 2001 From: victorkowalski Date: Fri, 7 Nov 2025 12:27:47 +0300 Subject: [PATCH 8/8] readme upd --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 5799c4a..d274c80 100644 --- a/README.md +++ b/README.md @@ -518,7 +518,6 @@ captcha.SetSteps("[5,12,22,24,21,23,10,7,2,8,19,18,8,24,21,22,11,14,16,5,18,20,4 Token-based method requires redirect_uri parameter, as well as proxy and userAgent. The value of the redirect_uri parameter can be found in the response to requests to the VK API that return captchas. ```csharp - VkCaptcha captcha = new VkCaptcha("vkcaptcha"); captcha.SetRedirectUri("https://id.vk.com/not_robot_captcha?domain=vk.com&session_token=eyJ....HGsc5B4LyvjA&variant=popup&blank=1");