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

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

Logo of CapSolver

Nikolai Smirnov

Software Development Lead

17-Sep-2024

Прохождение сложных CAPTCHA-задач, особенно когда речь идет о Turnstile от Cloudflare, может быть непростой задачей. Будучи опытным разработчиком, я сталкивался с многочисленными системами CAPTCHA за эти годы, но Cloudflare Turnstile представляет собой уникальную проблему из-за своих сложных алгоритмов, разработанных для предотвращения автоматизированных систем. В этом руководстве я расскажу вам, как справляться с задачами CAPTCHA Cloudflare Turnstile с использованием C#, предоставив вам практические знания и методы для повышения эффективности автоматизации.

Содержание

  1. Введение в Cloudflare Turnstile
  2. Настройка среды разработки C#
  • Загрузка и установка .NET
  • Настройка VS Code для разработки на C#
  1. Получение предварительных условий для использования API
  • Регистрация в CapSolver
  • Извлечение SiteKey для Turnstile
  1. Использование API CapSolver для получения токена Turnstile
  2. Полный пример кода
  3. Обработка ошибок и устранение неполадок
  • Ошибки отказа запроса
  1. Объяснение кода
  2. Заключение

Понимание 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 Copy
      dotnet add package Newtonsoft.Json

Получение предварительных условий для использования 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 Copy
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 Copy
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 ключу с целевого веб-сайта.

Объяснение

  1. Настройка задачи: В методе CallCapsolver вы определяете тип задачи AntiTurnstileTaskProxyLess, websiteURL и websiteKey. Эти параметры отправляются в CapSolver для создания задачи решения CAPTCHA.
  2. Опрос статуса задачи: После создания задачи код опрашивает конечную точку getTaskResult, чтобы проверить статус задачи. Если задача готова, она извлекает решение (токен Turnstile); если она завершается ошибкой, она возвращает ошибку.
  3. Использование токена: Метод Login использует полученный от CapSolver токен для аутентификации запроса входа на защищенный Cloudflare веб-сайт.

Заключение

Следуя этому руководству, вы сможете разобраться со сложностями решения задач CAPTCHA Cloudflare Turnstile с использованием C#. API CapSolver обеспечивает надежный и эффективный способ автоматизации этого процесса, улучшая ваши возможности автоматизации. Для получения дополнительной информации и обновлений посетите CapSolver.

Примечание о соответствии

Важно: Принимая участие в веб-скрейпинге, важно соблюдать правовые и этические нормы. Всегда убедитесь, что у вас есть разрешение на скрейпинг целевого веб-сайта, и уважайте файл robots.txt и условия обслуживания сайта. CapSolver категорически против неправомерного использования наших сервисов для любых несовместимых действий. Неправомерное использование автоматизированных инструментов для обхода CAPTCHA без надлежащего разрешения может привести к юридическим последствиям. Убедитесь, что ваши действия по скрейпингу соответствуют всем применимым законам и нормативным актам, чтобы избежать возможных проблем.

Дисклеймер о соблюдении: Информация, представленная в этом блоге, предназначена только для справочных целей. CapSolver обязуется соблюдать все применимые законы и нормы. Использование сети CapSolver для незаконной, мошеннической или злоупотребляющей деятельности строго запрещено и будет расследовано. Наши решения для распознавания капчи улучшают пользовательский опыт, обеспечивая 100% соблюдение при помощи в решении трудностей с капчей в процессе сбора общедоступных данных. Мы призываем к ответственному использованию наших услуг. Для получения дополнительной информации, пожалуйста, посетите наши Условия обслуживания и Политику конфиденциальности.

Ещеe

Как обойти защиту Cloudflare JS при веб-скрейпинге и автоматизации
Как обойти защиту Cloudflare JS при веб-скрапинге и автоматизации

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

Cloudflare
Logo of CapSolver

Nikolai Smirnov

05-Mar-2025

Отпечатки TLS в Cloudflare: что это такое и как их решить
Отпечатки TLS Cloudflare: что это и как это решить

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

Cloudflare
Logo of CapSolver

Nikolai Smirnov

28-Feb-2025

Как извлечь данные с сайта, защищенного Cloudflare
Как извлечь данные с сайта, защищенного Cloudflare

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

Cloudflare
Logo of CapSolver

Ethan Collins

20-Feb-2025

Как решать задачи Cloudflare с использованием Python и Go в 2025 году
Как решать задачи Cloudflare с использованием Python и Go в 2025 году

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

Cloudflare
Logo of CapSolver

Nikolai Smirnov

05-Nov-2024

Как решить капчи Cloudflare Turnstile с помощью Selenium
Как обойти капчу Turnstile Cloudflare с помощью Selenium

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

Cloudflare
Logo of CapSolver

Nikolai Smirnov

11-Oct-2024

Руководство по решению капчи Cloudflare Turnstile в Java для веб-автоматизации
Руководство по решению капчи Cloudflare Turnstile в Java для веб-автоматизации

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

Cloudflare
Logo of CapSolver

Nikolai Smirnov

08-Oct-2024