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.Json
para 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
siteKey
para o site de destino é essencial. AsiteKey
é necessária para usar a API de decodificação e resolver o CAPTCHA. - Você pode extrair a
siteKey
usando 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
siteKey
corresponde à do site de destino.
Explicação
- Configurando a tarefa: No método
CallCapsolver
, você define o tipo de tarefaAntiTurnstileTaskProxyLess
, owebsiteURL
ewebsiteKey
. 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
getTaskResult
para 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
Login
usa 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.txt
e 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 Resolver o Cloudflare Usando Python e Go em 2025
Compartilharei insights sobre o que é o Cloudflare Turnstile, usando Python e Go para essas tarefas, se o Turnstile consegue detectar scrapers Python e como contorná-lo efetivamente usando soluções como o CapSolver.

Adélia Cruz
05-Nov-2024

Como Resolver Captchas do Cloudflare Turnstile com Selenium
Neste blog, discutiremos várias técnicas eficazes para superar os Captchas Cloudflare Turnstile usando Selenium.

Adélia Cruz
11-Oct-2024

Um Guia para Resolver Captchas do Cloudflare Turnstile em Java para Automação Web
Aprenda como automatizar interações web em Java e contornar o CAPTCHA Turnstile do Cloudflare com ferramentas práticas e técnicas de codificação.

Aloísio Vítor
08-Oct-2024

Como Automatizar a Solução do Cloudflare Turnstile para Rastreamento Web
Vamos explorar estratégias para lidar com o CAPTCHA Cloudflare Turnstile em web crawling e discutir técnicas para automatizar sua solução usando Puppeteer e CapSolver em Python.

Adélia Cruz
27-Sep-2024

Como usar C# para resolver desafios de CAPTCHA do Cloudflare Turnstile
Você vai saber como resolver facilmente o desafio CAPTCHA do Cloudflare Turnstile usando C# e quer saber os detalhes? Vamos lá!

Adélia Cruz
17-Sep-2024

Como Resolver o Cloudflare | Usando Puppeteer e Node.js
Vamos explorar como resolver efetivamente desafios do Cloudflare, como o Turnstile, utilizando Puppeteer e Node.js com a ajuda do solucionador de CAPTCHA.

Aloísio Vítor
22-Aug-2024