Como usar C# para resolver desafios de CAPTCHA do Cloudflare Turnstile

Adélia Cruz
Neural Network Developer
17-Sep-2024

Navegar pelas complexidades dos desafios de CAPTCHA pode ser uma tarefa formidável, especialmente quando se trata do Turnstile da Cloudflare. Como um desenvolvedor experiente, encontrei inúmeros sistemas CAPTCHA ao longo dos anos, mas o Cloudflare Turnstile apresenta um desafio único devido aos seus algoritmos sofisticados projetados para frustrar sistemas automatizados. Neste guia, vou guiá-lo em como enfrentar os desafios do CAPTCHA do Cloudflare Turnstile usando C#, fornecendo-lhe insights práticos e técnicas para aprimorar seus esforços de automação.
Índice
- Introdução ao Cloudflare Turnstile
- Configurando o ambiente de desenvolvimento C#
- Baixar e instalar .NET
- Configurar o VS Code para o desenvolvimento em C#
- Obter os pré-requisitos de uso da API
- Registrar-se no CapSolver
- Recuperar a SiteKey para Turnstile
- Usando a API do CapSolver para obter um token Turnstile
- Exemplo completo de código
- Tratamento de erros e solução de problemas
- Erros de falha de solicitação
- Explicação do código
- Conclusão
Entendendo o Cloudflare Turnstile
O Cloudflare Turnstile é um sistema CAPTCHA avançado projetado para proteger sites de bots automatizados, garantindo ao mesmo tempo atrito mínimo para usuários legítimos. Diferentemente dos CAPTCHAs tradicionais, que geralmente envolvem a resolução de quebra-cabeças ou a identificação de objetos, o Turnstile opera por meio de uma abordagem mais sutil. Ele analisa o comportamento do usuário e várias interações da web para determinar se o visitante é um humano ou um bot.
O Turnstile emprega uma gama de sinais, incluindo movimentos do mouse, padrões de cliques e tempos de interação, para gerar um desafio que é difícil para os sistemas automatizados resolverem. Isso o torna uma ferramenta poderosa para a segurança do site, mas também um obstáculo desafiador para a automação.
Código bônus
Obtenha seu Código bônus para as melhores soluções de captcha; CapSolver: WEBS. Após resgatá-lo, você receberá um bônus extra de 5% após cada recarga, Ilimitado
Configurando o ambiente de desenvolvimento C#
1. Baixar e instalar .NET
- Visite esta página para baixar o .NET.
- Siga as instruções fornecidas para seu sistema operacional para instalar o .NET.
2. Configurar o VS Code para o desenvolvimento em C#
- Instale a extensão C# para o VS Code.
- No VS Code, procure por "C#" no mercado de extensões e instale o plugin oficial da Microsoft.
- Esta extensão fornece recursos como IntelliSense e formatação de código, tornando o desenvolvimento em C# mais fácil.

- Instale o pacote de análise JSON
Newtonsoft.Jsonpara lidar com dados JSON.- Você pode instalar este pacote usando o NuGet com o comando:bash
dotnet add package Newtonsoft.Json
- Você pode instalar este pacote usando o NuGet com o comando:
Obter os pré-requisitos de uso da API
1. Registrar-se no CapSolver
- Crie uma conta no CapSolver para acessar seus serviços de API.
- Após o registro, você receberá uma chave de API necessária para acessar os serviços de resolução de CAPTCHA do CapSolver.
2. Recuperar a SiteKey para Turnstile
- Para desafios de CAPTCHA do Cloudflare Turnstile, obter a
siteKeypara o site de destino é essencial. AsiteKeyé necessária para usar a API de decodificação e resolver o CAPTCHA. - Você pode extrair a
siteKeyusando a Extensão CapSolver, que simplifica o processo.
Usando a API do CapSolver para obter um token Turnstile
Aqui está o código para interagir com a API do CapSolver, solicitar a resolução de CAPTCHA e recuperar o token Turnstile.
csharp
public static async Task<string> CallCapsolver()
{
// // Send GET request
// var todoItem = await GetTodoItemAsync(API_URL);
// Console.WriteLine("GET Request Result:");
// Console.WriteLine(todoItem);
var data = new
{
clientKey = CAPSOLVER_API_KEY,
task = new
{
type = "AntiTurnstileTaskProxyLess",
websiteURL = PAGE_URL,
websiteKey = SITE_KEY,
metadata = new { action = "login" }
}
};
// Send POST request
var response = await PostTodoItemAsync("https://api.capsolver.com/createTask", data);
Console.WriteLine("POST Request Result:");
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("No task ID received.");
return "";
}
Console.WriteLine($"Created task ID: {taskId}");
while (true)
{
await Task.Delay(1000); // Sleep for 1 second
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($"Failed to get task result: {responseString}");
return "";
}
taskResp = JsonConvert.DeserializeObject<JObject>(responseString);
Console.WriteLine(taskResp);
var status = taskResp["status"].ToString();
if (status == "ready")
{
Console.WriteLine("Successfully => " + responseString);
return taskResp["solution"]["token"].ToString();
}
if (status == "failed")
{
Console.WriteLine("Failed! => " + responseString);
return "";
}
}
}
Exemplo completo de código
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()
{
// // Send GET request
// var todoItem = await GetTodoItemAsync(API_URL);
// Console.WriteLine("GET Request Result:");
// Console.WriteLine(todoItem);
var data = new
{
clientKey = CAPSOLVER_API_KEY,
task = new
{
type = "AntiTurnstileTaskProxyLess",
websiteURL = PAGE_URL,
websiteKey = SITE_KEY,
metadata = new { action = "login" }
}
};
// Send POST request
var response = await PostTodoItemAsync("https://api.capsolver.com/createTask", data);
Console.WriteLine("POST Request Result:");
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("No task ID received.");
return "";
}
Console.WriteLine($"Created task ID: {taskId}");
while (true)
{
await Task.Delay(1000); // Sleep for 1 second
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($"Failed to get task result: {responseString}");
return "";
}
taskResp = JsonConvert.DeserializeObject<JObject>(responseString);
Console.WriteLine(taskResp);
var status = taskResp["status"].ToString();
if (status == "ready")
{
Console.WriteLine("Successfully => " + responseString);
return taskResp["solution"]["token"].ToString();
}
if (status == "failed")
{
Console.WriteLine("Failed! => " + responseString);
return "";
}
}
}
public static async Task Login(string token)
{
using var httpClient = new HttpClient();
// Add request headers
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Cookie", $"cf_clearance={token}");
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Host", "dash.cloudflare.com");
var data = new {
cf_challenge_response = token,
email = "[email protected]",
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($"Request failed with status code {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($"Request failed with status code {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($"Request failed with status code {response.StatusCode}");
}
return response;
}
}
}
Tratamento de erros e solução de problemas
- Falha de solicitação: Se você encontrar um erro de "Falha de solicitação", verifique se a chave da API e a chave do site estão corretas.
- Certifique-se de ter uma chave de API ativa de sua conta CapSolver.
- Verifique novamente se a
siteKeycorresponde à do site de destino.
Explicação
- Configurando a tarefa: No método
CallCapsolver, você define o tipo de tarefaAntiTurnstileTaskProxyLess, owebsiteURLewebsiteKey. Esses parâmetros são enviados ao CapSolver para criar a tarefa de resolução de CAPTCHA. - Consulta do status da tarefa: Depois que a tarefa é criada, o código consulta o endpoint
getTaskResultpara verificar o status da tarefa. Se a tarefa estiver pronta, ela recupera a solução (o token Turnstile); se falhar, ele retorna um erro. - Usando o token: O método
Loginusa o token recebido do CapSolver para autenticar a solicitação de login no site protegido pelo Cloudflare.
Conclusão
Seguindo este guia, você poderá navegar pelas complexidades da resolução dos desafios do Cloudflare Turnstile CAPTCHA usando C#. A API do CapSolver fornece uma maneira confiável e eficiente de automatizar o processo, melhorando suas capacidades de automação. Para obter mais informações e atualizações, visite CapSolver.
Observação sobre conformidade
Importante: Ao se envolver em web scraping, é fundamental aderir às diretrizes legais e éticas. Sempre certifique-se de ter permissão para raspar o site de destino e respeite o arquivo
robots.txte os termos de serviço do site. O CapSolver se opõe firmemente ao uso indevido de nossos serviços para qualquer atividade não compatível. O uso indevido de ferramentas automatizadas para contornar CAPTCHAs sem autorização adequada pode levar a consequências legais. Certifique-se de que suas atividades de scraping estejam em conformidade com todas as leis e regulamentações aplicáveis para evitar problemas potenciais.
Declaração de Conformidade: As informações fornecidas neste blog são apenas para fins informativos. A CapSolver está comprometida em cumprir todas as leis e regulamentos aplicáveis. O uso da rede CapSolver para atividades ilegais, fraudulentas ou abusivas é estritamente proibido e será investigado. Nossas soluções de resolução de captcha melhoram a experiência do usuário enquanto garantem 100% de conformidade ao ajudar a resolver dificuldades de captcha durante a coleta de dados públicos. Incentivamos o uso responsável de nossos serviços. Para mais informações, visite nossos Termos de Serviço e Política de Privacidade.
Mais

Como passar a verificação de que você é humano do Cloudflare sem ficar preso
Preso em "verificando que você é humano" ou "Desafio do Cloudflare"? Aprenda as causas comuns e descubra as soluções técnicas para que os sistemas automatizados passem a verificação sempre.

Emma Foster
20-Jan-2026

Entendendo o Erro 1010 do Cloudflare e Como Resolvê-lo
Aprenda como resolver o erro Cloudflare 1010, comumente conhecido como "Acesso Negado: Bot Malicioso". Entenda as causas por trás deste erro e descubra soluções práticas, incluindo a integração com o CapSolver, para contornar as verificações de segurança do Cloudflare e garantir acesso sem interrupções a sites.

Adélia Cruz
04-Jan-2026

Como identificar se o cData é necessário para resolver o Cloudflare Turnstile usando a extensão CapSolver
Aprenda a identificar cData para resolver CAPTCHAs de forma eficaz do Cloudflare Turnstile. Siga nosso guia passo a passo sobre como usar as ferramentas e técnicas do Capsolver.

Lucas Mitchell
31-Dec-2025

Como resolver o Cloudflare Turnstile?
Resolva de forma eficiente o Cloudflare Turnstile usando a API do CapSolver. Aprenda a criar tarefas, gerenciar proxies e recuperar resultados rapidamente para interações web mais suaves.

Nikolai Smirnov
24-Dec-2025

Como resolver desafios do Cloudflare?
Aprenda a resolver o Desafio Cloudflare com a API Capsolver: Guia passo a passo sobre criação de tarefas e recuperação de resultados, com suporte em Python e mais

Emma Foster
23-Dec-2025

Como resolver o desafio do Cloudflare com Python
Neste artigo, vamos mostrar para você como resolver o desafio do Cloudflare com Python.

Sora Fujimoto
19-Dec-2025


