Sản phẩmTích hợpTài nguyênTài liệuGiá cả
Bắt đầu ngay

© 2026 CapSolver. All rights reserved.

Liên hệ chúng tôi

Slack: lola@capsolver.com

Sản phẩm

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Tiện ích trình duyệt
  • Thêm nhiều loại CAPTCHA

Tích hợp

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Đối tác
  • Xem tất cả tích hợp

Tài nguyên

  • Chương trình giới thiệu
  • Tài liệu
  • Tham chiếu API
  • Blog
  • Câu hỏi thường gặp
  • Thuật ngữ
  • Trạng thái

Pháp lý

  • Điều khoản dịch vụ
  • Chính sách bảo mật
  • Chính sách hoàn tiền
  • Không bán thông tin cá nhân của tôi
Blog/Cloudflare/Cách sử dụng C# để giải quyết các thách thức CAPTCHA của Cloudflare Turnstile
Sep18, 2024

Cách sử dụng C# để giải quyết các thách thức CAPTCHA của Cloudflare Turnstile

Anh Tuan

Anh Tuan

Data Science Expert

Điều hướng qua những phức tạp của các thử thách CAPTCHA có thể là một nhiệm vụ khó khăn, đặc biệt là khi nói đến Turnstile của Cloudflare. Là một nhà phát triển dày dặn kinh nghiệm, tôi đã gặp phải vô số hệ thống CAPTCHA trong những năm qua, nhưng Cloudflare Turnstile đặt ra một thách thức độc đáo do các thuật toán tinh vi của nó được thiết kế để ngăn chặn các hệ thống tự động. Trong hướng dẫn này, tôi sẽ hướng dẫn bạn cách xử lý các thử thách Cloudflare Turnstile CAPTCHA bằng cách sử dụng C#, cung cấp cho bạn những hiểu biết thực tế và kỹ thuật để nâng cao nỗ lực tự động hóa của bạn.

Mục lục

  1. Giới thiệu về Cloudflare Turnstile
  2. Thiết lập môi trường phát triển C#
  • Tải xuống và cài đặt .NET
  • Cấu hình VS Code để phát triển C#
  1. Thu thập điều kiện tiên quyết sử dụng API
  • Đăng ký CapSolver
  • Truy xuất SiteKey cho Turnstile
  1. Sử dụng CapSolver API để lấy Token Turnstile
  2. Ví dụ mã đầy đủ
  3. Xử lý lỗi và khắc phục sự cố
  • Lỗi yêu cầu không thành công
  1. Giải thích mã
  2. Kết luận

Hiểu về Cloudflare Turnstile

Cloudflare Turnstile là một hệ thống CAPTCHA nâng cao được thiết kế để bảo vệ các trang web khỏi các bot tự động đồng thời đảm bảo ít cản trở nhất đối với người dùng hợp pháp. Không giống như CAPTCHA truyền thống, thường yêu cầu giải câu đố hoặc xác định đối tượng, Turnstile hoạt động thông qua một cách tiếp cận tinh tế hơn. Nó phân tích hành vi của người dùng và các tương tác web khác nhau để xác định xem khách truy cập là người hay bot.
Turnstile sử dụng một loạt các tín hiệu, bao gồm chuyển động chuột, mô hình nhấp chuột và thời gian tương tác, để tạo ra một thử thách khó đối với các hệ thống tự động. Điều này làm cho nó trở thành một công cụ mạnh mẽ cho bảo mật trang web nhưng cũng là một trở ngại khó khăn đối với tự động hóa.

Mã bổ sung

Nhận Mã thưởng của bạn cho các giải pháp CAPTCHA hàng đầu; CapSolver: WEBS. Sau khi đổi mã, bạn sẽ nhận được thêm 5% tiền thưởng sau mỗi lần nạp tiền, không giới hạn

Thiết lập môi trường phát triển C#

1. Tải xuống và cài đặt .NET

  • Truy cập trang này để tải xuống .NET.
  • Làm theo hướng dẫn được cung cấp cho hệ điều hành của bạn để cài đặt .NET.

2. Cấu hình VS Code để phát triển C#

  • Cài đặt phần mở rộng C# cho VS Code.
    • Trong VS Code, tìm kiếm "C#" trong thị trường phần mở rộng và cài đặt plugin chính thức của Microsoft.
    • Phần mở rộng này cung cấp các tính năng như IntelliSense và định dạng mã, giúp phát triển C# dễ dàng hơn.
  • Cài đặt gói phân tích JSON Newtonsoft.Json để xử lý dữ liệu JSON.
    • Bạn có thể cài đặt gói này bằng cách sử dụng NuGet với lệnh:
      bash Copy
      dotnet add package Newtonsoft.Json

Thu thập điều kiện tiên quyết sử dụng API

1. Đăng ký CapSolver

  • Tạo tài khoản trên CapSolver để truy cập các dịch vụ API của họ.
  • Sau khi đăng ký, bạn sẽ nhận được một khóa API cần thiết để truy cập các dịch vụ giải quyết CAPTCHA của CapSolver.

2. Truy xuất SiteKey cho Turnstile

  • Đối với các thử thách Cloudflare Turnstile CAPTCHA, việc lấy siteKey cho trang web đích là điều cần thiết. siteKey là yêu cầu để sử dụng API giải mã và giải quyết CAPTCHA.
  • Bạn có thể trích xuất siteKey bằng cách sử dụng Phần mở rộng CapSolver, giúp đơn giản hóa quá trình.

Sử dụng CapSolver API để lấy Token Turnstile

Đây là mã để tương tác với CapSolver API, yêu cầu giải quyết CAPTCHA và lấy token Turnstile.

csharp Copy
public static async Task<string> CallCapsolver()
{
    // // Gửi yêu cầu GET
    // var todoItem = await GetTodoItemAsync(API_URL);
    // Console.WriteLine("Kết quả yêu cầu 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" }
        }
    };

    // Gửi yêu cầu POST
    var response = await PostTodoItemAsync("https://api.capsolver.com/createTask", data);
    Console.WriteLine("Kết quả yêu cầu 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("Không nhận được ID tác vụ.");
        return "";
    }
    Console.WriteLine($"ID tác vụ đã tạo: {taskId}");

    while (true)
    {
        await Task.Delay(1000); // Ngủ trong 1 giây
        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($"Không thể lấy kết quả tác vụ: {responseString}");
            return "";
        }

        taskResp = JsonConvert.DeserializeObject<JObject>(responseString);
        Console.WriteLine(taskResp);
        var status = taskResp["status"].ToString();

        if (status == "ready")
        {
            Console.WriteLine("Thành công => " + responseString);
            return taskResp["solution"]["token"].ToString();
        }

        if (status == "failed")
        {
            Console.WriteLine("Thất bại! => " + responseString);
            return "";
        }
    }
}

Ví dụ mã đầy đủ

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()
        {
            // // Gửi yêu cầu GET
            // var todoItem = await GetTodoItemAsync(API_URL);
            // Console.WriteLine("Kết quả yêu cầu 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" }
                }
            };

            // Gửi yêu cầu POST
            var response = await PostTodoItemAsync("https://api.capsolver.com/createTask", data);
            Console.WriteLine("Kết quả yêu cầu 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("Không nhận được ID tác vụ.");
                return "";
            }
            Console.WriteLine($"ID tác vụ đã tạo: {taskId}");

            while (true)
            {
                await Task.Delay(1000); // Ngủ trong 1 giây
                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($"Không thể lấy kết quả tác vụ: {responseString}");
                    return "";
                }

                taskResp = JsonConvert.DeserializeObject<JObject>(responseString);
                Console.WriteLine(taskResp);
                var status = taskResp["status"].ToString();

                if (status == "ready")
                {
                    Console.WriteLine("Thành công => " + responseString);
                    return taskResp["solution"]["token"].ToString();
                }

                if (status == "failed")
                {
                    Console.WriteLine("Thất bại! => " + responseString);
                    return "";
                }
            }
        }

        public static async Task Login(string token)
        {
            using var httpClient = new HttpClient();
            // Thêm tiêu đề yêu cầu
            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($"Yêu cầu không thành công với mã trạng thái {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($"Yêu cầu không thành công với mã trạng thái {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($"Yêu cầu không thành công với mã trạng thái {response.StatusCode}");
            }

            return response;
        }
    }
}

Xử lý lỗi và khắc phục sự cố

  • Yêu cầu không thành công: Nếu bạn gặp lỗi "Yêu cầu không thành công", hãy xác minh xem khóa API và khóa trang web có chính xác hay không.
    • Đảm bảo bạn có khóa API hoạt động từ tài khoản CapSolver của mình.
    • Kiểm tra lại xem siteKey có khớp với siteKey từ trang web đích hay không.

Giải thích

  1. Thiết lập tác vụ: Trong phương thức CallCapsolver, bạn xác định kiểu tác vụ AntiTurnstileTaskProxyLess, websiteURL và websiteKey. Các tham số này được gửi đến CapSolver để tạo tác vụ giải quyết CAPTCHA.
  2. Lấy thông tin trạng thái tác vụ: Sau khi tác vụ được tạo, mã sẽ lấy thông tin từ điểm cuối getTaskResult để kiểm tra trạng thái của tác vụ. Nếu tác vụ đã sẵn sàng, nó sẽ lấy giải pháp (token Turnstile); nếu nó thất bại, nó sẽ trả về lỗi.
  3. Sử dụng token: Phương thức Login sử dụng token nhận được từ CapSolver để xác thực yêu cầu đăng nhập trên trang web được bảo vệ bởi Cloudflare.

Kết luận

Bằng cách làm theo hướng dẫn này, bạn sẽ có thể điều hướng qua những phức tạp của việc giải quyết các thử thách Cloudflare Turnstile CAPTCHA bằng cách sử dụng C#. API của CapSolver cung cấp một cách đáng tin cậy và hiệu quả để tự động hóa quy trình, cải thiện khả năng tự động hóa của bạn. Để biết thêm thông tin và cập nhật, hãy truy cập CapSolver.

Lưu ý về tuân thủ

Quan trọng: Khi tham gia vào web scraping, điều quan trọng là phải tuân thủ các hướng dẫn pháp lý và đạo đức. Luôn đảm bảo rằng bạn có quyền scraping trang web đích và tôn trọng tệp robots.txt và điều khoản dịch vụ của trang web. CapSolver phản đối việc sử dụng sai dịch vụ của chúng tôi cho bất kỳ hoạt động nào không tuân thủ. Sử dụng sai các công cụ tự động để bỏ qua CAPTCHA mà không có quyền hợp lệ có thể dẫn đến hậu quả pháp lý. Hãy chắc chắn rằng hoạt động scraping của bạn tuân thủ tất cả các luật và quy định hiện hành để tránh các vấn đề tiềm ẩn.

Xem thêm

CloudflareMar 26, 2026

Khắc phục Lỗi 1005 Cloudflare: Hướng dẫn Gỡ mã web và Giải pháp

Học cách khắc phục lỗi Cloudflare Error 1005 bị từ chối truy cập khi quét dữ liệu. Khám phá các giải pháp như proxy nhà ở, dấu vân tay trình duyệt và CapSolver cho CAPTCHA. Tối ưu hóa việc trích xuất dữ liệu.

Adélia Cruz
Adélia Cruz
CloudflareMar 17, 2026

Làm thế nào để điều hướng Cloudflare Turnstile với Playwright Stealth trong luồng công việc AI

Khám phá cách xử lý hiệu quả Cloudflare Turnstile trong các quy trình AI bằng các kỹ thuật che giấu của Playwright và CapSolver để giải captcha đáng tin cậy. Học các chiến lược tích hợp thực tế và các phương pháp tốt nhất để tự động hóa không gián đoạn.

Nội dung

Anh Tuan
Anh Tuan
CloudflareJan 19, 2026

Cách vượt qua xác minh bạn là người thật của Cloudflare mà không bị mắc kẹt

Bị mắc kẹt ở "xác minh bạn là người" hoặc "Thử thách Cloudflare"? Học về các nguyên nhân phổ biến và khám phá các giải pháp kỹ thuật để hệ thống tự động vượt qua xác minh mỗi lần.

Rajinder Singh
Rajinder Singh
CloudflareJan 29, 2025

Cách vượt qua thử thách Cloudflare khi thu thập dữ liệu web vào năm 2026

Tìm hiểu cách vượt qua Cloudflare Challenge và Turnstile trong năm 2026 để thu thập dữ liệu web liền mạch. Khám phá tích hợp Capsolver, mẹo về dấu vân tay TLS và các bản sửa lỗi cho các lỗi thường gặp để tránh địa ngục CAPTCHA. Tiết kiệm thời gian và mở rộng quy mô quá trình trích xuất dữ liệu của bạn.

Emma Foster
Emma Foster