Как использовать C# для решения задач CAPTCHA от Cloudflare Turnstile

Nikolai Smirnov
Software Development Lead
17-Sep-2024

Прохождение сложных CAPTCHA-задач, особенно когда речь идет о Turnstile от Cloudflare, может быть непростой задачей. Будучи опытным разработчиком, я сталкивался с многочисленными системами CAPTCHA за эти годы, но Cloudflare Turnstile представляет собой уникальную проблему из-за своих сложных алгоритмов, разработанных для предотвращения автоматизированных систем. В этом руководстве я расскажу вам, как справляться с задачами CAPTCHA Cloudflare Turnstile с использованием C#, предоставив вам практические знания и методы для повышения эффективности автоматизации.
Содержание
- Введение в Cloudflare Turnstile
- Настройка среды разработки C#
- Загрузка и установка .NET
- Настройка VS Code для разработки на C#
- Получение предварительных условий для использования API
- Регистрация в CapSolver
- Извлечение SiteKey для Turnstile
- Использование API CapSolver для получения токена Turnstile
- Полный пример кода
- Обработка ошибок и устранение неполадок
- Ошибки отказа запроса
- Объяснение кода
- Заключение
Понимание Cloudflare Turnstile
Cloudflare Turnstile - это продвинутая система CAPTCHA, предназначенная для защиты веб-сайтов от автоматизированных ботов, одновременно обеспечивая минимальные неудобства для легитимных пользователей. В отличие от традиционных CAPTCHA, которые часто требуют решения головоломок или идентификации объектов, Turnstile работает через более тонкий подход. Она анализирует поведение пользователя и различные веб-взаимодействия, чтобы определить, является ли посетитель человеком или ботом.
Turnstile использует ряд сигналов, включая движения мыши, схемы кликов и время взаимодействия, чтобы создать задачу, которую автоматизированным системам трудно решить. Это делает ее мощным инструментом для безопасности веб-сайтов, но также создает сложную преграду для автоматизации.
Бонусный код
Возьмите свой Бонусный код для лучших решений по CAPTCHA; CapSolver: WEBS. После его активации вы получите дополнительный бонус в размере 5% после каждой пополнения, неограниченный
Настройка среды разработки C#
1. Загрузка и установка .NET
- Перейдите на эту страницу, чтобы загрузить .NET.
- Следуйте инструкциям, предоставленным для вашей операционной системы, чтобы установить .NET.
2. Настройка VS Code для разработки на C#
- Установите расширение C# для VS Code.
- В VS Code найдите «C#» в магазине расширений и установите официальный плагин от Microsoft.
- Это расширение предоставляет такие функции, как IntelliSense и форматирование кода, что делает разработку на C# проще.

- Установите пакет разбора JSON
Newtonsoft.Jsonдля обработки данных JSON.- Вы можете установить этот пакет с помощью NuGet с помощью команды:bash
dotnet add package Newtonsoft.Json
- Вы можете установить этот пакет с помощью NuGet с помощью команды:
Получение предварительных условий для использования API
1. Регистрация в CapSolver
- Создайте учетную запись на CapSolver, чтобы получить доступ к их API-службам.
- После регистрации вы получите API-ключ, необходимый для доступа к службам решения CAPTCHA CapSolver.
2. Извлечение SiteKey для Turnstile
- Для задач CAPTCHA Cloudflare Turnstile необходимо получить
siteKeyдля целевого веб-сайта.siteKeyтребуется для использования декодирующего API и решения CAPTCHA. - Вы можете извлечь
siteKeyс помощью расширения CapSolver, которое упрощает этот процесс.
Использование API CapSolver для получения токена Turnstile
Вот код для взаимодействия с API CapSolver, запроса решения CAPTCHA и получения токена Turnstile.
csharp
public static async Task<string> CallCapsolver()
{
// // Отправить GET-запрос
// var todoItem = await GetTodoItemAsync(API_URL);
// Console.WriteLine("Результат GET-запроса:");
// Console.WriteLine(todoItem);
var data = new
{
clientKey = CAPSOLVER_API_KEY,
task = new
{
type = "AntiTurnstileTaskProxyLess",
websiteURL = PAGE_URL,
websiteKey = SITE_KEY,
metadata = new { action = "login" }
}
};
// Отправить POST-запрос
var response = await PostTodoItemAsync("https://api.capsolver.com/createTask", data);
Console.WriteLine("Результат POST-запроса:");
var responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseString);
JObject taskResp = JsonConvert.DeserializeObject<JObject>(responseString);
var taskId = taskResp["taskId"].ToString();
if (string.IsNullOrEmpty(taskId))
{
Console.WriteLine("Не получен ID задачи.");
return "";
}
Console.WriteLine($"Создан ID задачи: {taskId}");
while (true)
{
await Task.Delay(1000); // Спящий режим в течение 1 секунды
var resultData = new
{
clientKey = CAPSOLVER_API_KEY,
taskId = taskId
};
// content = new StringContent(JsonConvert.SerializeObject(data), System.Text.Encoding.UTF8, "application/json");
// response = await httpClient.PostAsync(uri, content);
response = await PostTodoItemAsync("https://api.capsolver.com/getTaskResult", resultData);
responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseString);
if (!response.IsSuccessStatusCode)
{
Console.WriteLine($"Не удалось получить результат задачи: {responseString}");
return "";
}
taskResp = JsonConvert.DeserializeObject<JObject>(responseString);
Console.WriteLine(taskResp);
var status = taskResp["status"].ToString();
if (status == "ready")
{
Console.WriteLine("Успешно => " + responseString);
return taskResp["solution"]["token"].ToString();
}
if (status == "failed")
{
Console.WriteLine("Ошибка! => " + responseString);
return "";
}
}
}
Полный пример кода
csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace HttpExample
{
public class Program
{
private const string CAPSOLVER_API_KEY = "CAI-xxxxxxxxxxxxxxxxxxx";
private const string PAGE_URL = "https://dash.cloudflare.com/login";
private const string SITE_KEY = "0x4AAAAAAAJel0iaAR3mgkjp";
public static async Task Main(string[] args)
{
var token = await CallCapsolver();
Console.WriteLine($"token: {token}");
await Login(token);
}
public static async Task<string> CallCapsolver()
{
// // Отправить GET-запрос
// var todoItem = await GetTodoItemAsync(API_URL);
// Console.WriteLine("Результат GET-запроса:");
// Console.WriteLine(todoItem);
var data = new
{
clientKey = CAPSOLVER_API_KEY,
task = new
{
type = "AntiTurnstileTaskProxyLess",
websiteURL = PAGE_URL,
websiteKey = SITE_KEY,
metadata = new { action = "login" }
}
};
// Отправить POST-запрос
var response = await PostTodoItemAsync("https://api.capsolver.com/createTask", data);
Console.WriteLine("Результат POST-запроса:");
var responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseString);
JObject taskResp = JsonConvert.DeserializeObject<JObject>(responseString);
var taskId = taskResp["taskId"].ToString();
if (string.IsNullOrEmpty(taskId))
{
Console.WriteLine("Не получен ID задачи.");
return "";
}
Console.WriteLine($"Создан ID задачи: {taskId}");
while (true)
{
await Task.Delay(1000); // Спящий режим в течение 1 секунды
var resultData = new
{
clientKey = CAPSOLVER_API_KEY,
taskId = taskId
};
// content = new StringContent(JsonConvert.SerializeObject(data), System.Text.Encoding.UTF8, "application/json");
// response = await httpClient.PostAsync(uri, content);
response = await PostTodoItemAsync("https://api.capsolver.com/getTaskResult", resultData);
responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseString);
if (!response.IsSuccessStatusCode)
{
Console.WriteLine($"Не удалось получить результат задачи: {responseString}");
return "";
}
taskResp = JsonConvert.DeserializeObject<JObject>(responseString);
Console.WriteLine(taskResp);
var status = taskResp["status"].ToString();
if (status == "ready")
{
Console.WriteLine("Успешно => " + responseString);
return taskResp["solution"]["token"].ToString();
}
if (status == "failed")
{
Console.WriteLine("Ошибка! => " + responseString);
return "";
}
}
}
public static async Task Login(string token)
{
using var httpClient = new HttpClient();
// Добавить заголовки запроса
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Cookie", $"cf_clearance={token}");
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Host", "dash.cloudflare.com");
var data = new {
cf_challenge_response = token,
email = "1111111@gmail.com",
password = "123456",
};
var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("https://dash.cloudflare.com/api/v4/login", content);
if (!response.IsSuccessStatusCode)
{
throw new Exception($"Запрос завершился с кодом состояния {response.StatusCode}");
}
var responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseString);
}
private static async Task<HttpResponseMessage> GetTodoItemAsync(string url)
{
using var httpClient = new HttpClient();
var response = await httpClient.GetAsync(url);
if (!response.IsSuccessStatusCode)
{
throw new Exception($"Запрос завершился с кодом состояния {response.StatusCode}");
}
// var responseString = await response.Content.ReadAsStringAsync();
return response;
}
private static async Task<HttpResponseMessage> PostTodoItemAsync(string url, object item)
{
using var httpClient = new HttpClient();
var json = JsonConvert.SerializeObject(item);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync(url, content);
if (!response.IsSuccessStatusCode)
{
throw new Exception($"Запрос завершился с кодом состояния {response.StatusCode}");
}
return response;
}
}
}
Обработка ошибок и устранение неполадок
- Ошибка отказа запроса: Если вы столкнулись с ошибкой «Ошибка отказа запроса», проверьте правильность API-ключа и site-ключа.
- Убедитесь, что у вас есть активный API-ключ из вашей учетной записи CapSolver.
- Еще раз проверьте, соответствует ли
siteKeyключу с целевого веб-сайта.
Объяснение
- Настройка задачи: В методе
CallCapsolverвы определяете тип задачиAntiTurnstileTaskProxyLess,websiteURLиwebsiteKey. Эти параметры отправляются в CapSolver для создания задачи решения CAPTCHA. - Опрос статуса задачи: После создания задачи код опрашивает конечную точку
getTaskResult, чтобы проверить статус задачи. Если задача готова, она извлекает решение (токен Turnstile); если она завершается ошибкой, она возвращает ошибку. - Использование токена: Метод
Loginиспользует полученный от CapSolver токен для аутентификации запроса входа на защищенный Cloudflare веб-сайт.
Заключение
Следуя этому руководству, вы сможете разобраться со сложностями решения задач CAPTCHA Cloudflare Turnstile с использованием C#. API CapSolver обеспечивает надежный и эффективный способ автоматизации этого процесса, улучшая ваши возможности автоматизации. Для получения дополнительной информации и обновлений посетите CapSolver.
Примечание о соответствии
Важно: Принимая участие в веб-скрейпинге, важно соблюдать правовые и этические нормы. Всегда убедитесь, что у вас есть разрешение на скрейпинг целевого веб-сайта, и уважайте файл
robots.txtи условия обслуживания сайта. CapSolver категорически против неправомерного использования наших сервисов для любых несовместимых действий. Неправомерное использование автоматизированных инструментов для обхода CAPTCHA без надлежащего разрешения может привести к юридическим последствиям. Убедитесь, что ваши действия по скрейпингу соответствуют всем применимым законам и нормативным актам, чтобы избежать возможных проблем.
Дисклеймер о соблюдении: Информация, представленная в этом блоге, предназначена только для справочных целей. CapSolver обязуется соблюдать все применимые законы и нормы. Использование сети CapSolver для незаконной, мошеннической или злоупотребляющей деятельности строго запрещено и будет расследовано. Наши решения для распознавания капчи улучшают пользовательский опыт, обеспечивая 100% соблюдение при помощи в решении трудностей с капчей в процессе сбора общедоступных данных. Мы призываем к ответственному использованию наших услуг. Для получения дополнительной информации, пожалуйста, посетите наши Условия обслуживания и Политику конфиденциальности.
Ещеe

Как обойти защиту Cloudflare JS при веб-скрапинге и автоматизации
Научитесь решать JavaScript-вызов Cloudflare для бесшовного веб-скрапинга и автоматизации. Откройте для себя эффективные стратегии, включая использование headless-браузеров, ротацию прокси и использование расширенных возможностей решения CAPTCHA от CapSolver.

Nikolai Smirnov
05-Mar-2025

Отпечатки TLS Cloudflare: что это и как это решить
Узнайте о применении Cloudflare TLS-фингерпринтинга в целях безопасности, как он обнаруживает и блокирует ботов, и изучите эффективные методы решения этой проблемы для веб-скрейпинга и автоматизированного просмотра.

Nikolai Smirnov
28-Feb-2025

Как извлечь данные с сайта, защищенного Cloudflare
В этом руководстве мы рассмотрим этичные и эффективные методы извлечения данных с веб-сайтов, защищенных Cloudflare.

Ethan Collins
20-Feb-2025

Как решать задачи Cloudflare с использованием Python и Go в 2025 году
Поделюсь информацией о том, что такое Cloudflare Turnstile, используя Python и Go для этих задач, может ли Turnstile обнаружить Python-скрейперы и как эффективно обойти его с помощью таких решений, как CapSolver.

Nikolai Smirnov
05-Nov-2024

Как обойти капчу Turnstile Cloudflare с помощью Selenium
В этом блоге мы рассмотрим несколько эффективных способов обхода Captcha Turnstile от Cloudflare с помощью Selenium.

Nikolai Smirnov
11-Oct-2024

Руководство по решению капчи Cloudflare Turnstile в Java для веб-автоматизации
Узнайте, как автоматизировать взаимодействие с веб-сайтами на Java и обойти CAPTCHA Cloudflare Turnstile с помощью практических инструментов и методов программирования.

Nikolai Smirnov
08-Oct-2024


