
Adélia Cruz
Neural Network Developer
Em 2025, o CAPTCHA Turnstile do Cloudflare permanece uma barreira formidável para desenvolvedores que constroem ferramentas de web scraping ou automação. Diferentemente dos CAPTCHAs tradicionais, o Turnstile opera silenciosamente em segundo plano, analisando padrões de comportamento como movimentos do mouse e impressões digitais TLS para bloquear bots — tornando sua ultrapassagem um desafio de alto risco. Para desenvolvedores Go, isso significa combinar práticas de engenharia robustas com ferramentas avançadas como CapSolver.
cf_clearance, confiando em vez disso na análise comportamental.cf_clearance após a verificação.tls-client permitem a imitação precisa de handshakes TLS do navegador, evitando a impressão digital JA3/JA4.CLIENT_KEY.go get github.com/imroc/req/v3
go get github.com/tidwall/gjson
package main
import (
"fmt"
"log"
"time"
"github.com/imroc/req/v3"
"github.com/tidwall/gjson"
)
func createTask(apiKey, pageURL, siteKey string) string {
client := req.C()
postData := map[string]interface{}{
"clientKey": apiKey,
"task": map[string]interface{}{
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": pageURL,
"websiteKey": siteKey,
"metadata": map[string]string{"action": "login"},
},
}
resp, err := client.R().SetBodyJsonMarshal(postData).Post("https://api.capsolver.com/createTask")
if err != nil {
log.Fatal("Falha ao criar tarefa:", err)
}
return gjson.Get(resp.String(), "taskId").String()
}
func getTaskResult(apiKey, taskId string) (token string) {
client := req.C()
for {
postData := map[string]interface{}{"clientKey": apiKey, "taskId": taskId}
resp, err := client.R().SetBodyJsonMarshal(postData).Post("https://api.capsolver.com/getTaskResult")
if err != nil {
log.Fatal("Falha ao buscar resultado da tarefa:", err)
}
status := gjson.Get(resp.String(), "status").String()
if status == "ready" {
return gjson.Get(resp.String(), "solution.token").String()
} else if status == "failed" {
log.Fatal("Tarefa falhou:", resp.String())
}
time.Sleep(3 * time.Second) // Consulta a cada 3 segundos
}
}
func main() {
apiKey := "YOUR_CAPSOLVER_API_KEY"
pageURL := "https://dash.cloudflare.com/login"
siteKey := "0x4AAAAAAAJel0iaAR3mgkjp" // Chave Turnstile do site de destino
taskId := createTask(apiKey, pageURL, siteKey)
token := getTaskResult(apiKey, taskId)
fmt.Println("Token obtido:", token)
}
createTask envia uma solicitação para a API do CapSolver, especificando AntiTurnstileTaskProxyLess para Turnstile.getTaskResult verifica o status da tarefa a cada 3 segundos até que um token seja retornado.package main
import (
"fmt"
"log"
"time"
"github.com/gocolly/colly/v2"
"github.com/imroc/req/v3"
"github.com/tidwall/gjson"
)
const (
apiKey = "YOUR_CAPSOLVER_API_KEY"
targetURL = "https://protected-site.com"
proxy = ""
)
func solveCloudflareChallenge() (string, string) {
client := req.C()
postData := map[string]interface{}{
"clientKey": apiKey,
"task": map[string]interface{}{
"type": "AntiCloudflareTask",
"websiteURL": targetURL,
"proxy":proxy
},
},
}
resp, err := client.R().SetBodyJsonMarshal(postData).Post("https://api.capsolver.com/createTask")
if err != nil {
log.Fatal("Falha ao criar tarefa:", err)
}
taskId := gjson.Get(resp.String(), "taskId").String()
// Consulta por resultados
for i := 0; i < 20; i++ {
resultResp, _ := client.R().SetBodyJsonMarshal(map[string]string{
"clientKey": apiKey,
"taskId": taskId,
}).Post("https://api.capsolver.com/getTaskResult")
if gjson.Get(resultResp.String(), "status").String() == "ready" {
solution := gjson.Get(resultResp.String(), "solution")
return solution.Get("userAgent").String(),
solution.Get("cookies").(map[string]string)["cf_clearance"]
}
time.Sleep(3 * time.Second)
}
log.Fatal("Tempo limite para resolução do desafio")
return "", ""
}
func main() {
userAgent, cfClearance := solveCloudflareChallenge()
// Cria coletor com cookies resolvidos
c := colly.NewCollector(
colly.UserAgent(userAgent),
)
// Define cookies
c.OnRequest(func(r *colly.Request) {
r.Headers.Set("Cookie", fmt.Sprintf("cf_clearance=%s", cfClearance))
})
c.OnResponse(func(r *colly.Response) {
fmt.Println("Desafio Cloudflare contornado com sucesso!")
fmt.Println(string(r.Body))
})
c.Visit(targetURL)
}
Para mais informações, visite Documentação do Cloudflare Challenge Solver.
O Cloudflare lista IPs na blacklist. Roteie proxies residenciais (por exemplo, Bright Data) para evitar detecção.
Configure os cabeçalhos para corresponder à versão mais recente do Chrome.
Você deve usar todos os cabeçalhos dessa versão específica do navegador.
headers := map[string]string{
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Accept-Language": "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7", //Exemplo com português
"Sec-Fetch-Mode": "navigate",
}
Código 2: Configuração de cabeçalho para corresponder ao Chrome 120.
Use curl-impersonate ou tls-client para replicar o handshake TLS do Chrome e evitar discrepâncias JA3.
Reutilize cookies e cabeçalhos entre as solicitações para manter uma impressão digital consistente do navegador.
Obtenha seu código de bônus para as melhores soluções de captcha; CapSolver: CAPT. Após resgatá-lo, você receberá um bônus extra de 5% após cada recarga, Ilimitado
Por que estou recebendo um “Erro 600010” do CapSolver?
Isso indica que você pode ter selecionado o tipo de CAPTCHA errado (por exemplo, usando um solucionador específico do Turnstile para um Desafio Cloudflare). Verifique se você está usando AntiTurnstileTaskProxyLess para Turnstile ou AntiCloudflareTask para o desafio clássico JavaScript.
Por que ainda estou sendo bloqueado pelo Cloudflare mesmo após obter o token?
O Cloudflare pode detectar outros sinais, como reputação de IP, cabeçalhos ausentes ou impressões digitais TLS incompatíveis. Confirme se você está rotulando proxies residenciais, enviando os cabeçalhos corretos do navegador e usando uma impressão digital TLS que corresponda a um navegador real.
E se minhas solicitações retornarem HTTP 403?
Um 403 normalmente significa que o Cloudflare marcou seu IP ou cabeçalhos. Mudar para um proxy diferente ou modificar seus cabeçalhos (por exemplo, atualizar User-Agent, adicionar Accept-Language correto) geralmente resolve o problema.
Por que o token expira quase imediatamente após resolver o Turnstile?
Os tokens Turnstile têm um curto período de validade. Envie o token para o endpoint de destino imediatamente após recebê-lo, ou você pode ter que solicitar um novo token se muito tempo passar.
Como posso confirmar que o token Turnstile é válido?
Verifique a resposta do servidor após enviar o token. Se você ainda enfrentar um CAPTCHA, o token pode ser inválido ou expirado. Monitore as respostas do servidor e verifique seus cabeçalhos de solicitação e cookies de sessão.
Por que o CapSolver está demorando muito para fornecer uma solução?
Se a criação da tarefa estiver correta, mas os tempos de consulta excederem o tempo limite, pode ser um período de alta carga no serviço de resolução ou um problema com sua rede. Tente diminuir o intervalo de consulta, mas também certifique-se de não sobrecarregar a API com muitas solicitações simultâneas.
Usar um proxy sempre resolve problemas de bloqueio regional?
Nem sempre. Os proxies residenciais podem ajudar, mas se o IP do proxy já estiver marcado ou pertencer a um data center conhecido, o Cloudflare ainda pode apresentar um desafio. É melhor girar vários proxies residenciais confiáveis.
Como lidar com erros de incompatibilidade de impressão digital JA3 ou JA4?
Use bibliotecas ou ferramentas como tls-client ou curl-impersonate para imitar o handshake TLS exato de uma versão moderna do Chrome. Impressões digitais incompatíveis podem levar a um escrutínio adicional por parte do Cloudflare.
Por que vejo resultados inconsistentes quando algumas solicitações são bem-sucedidas, enquanto outras falham?
Isso geralmente acontece quando os dados da sessão não são reutilizados. Mantenha cabeçalhos, cookies e impressões digitais TLS consistentes em todas as solicitações na mesma sessão, especialmente se você estiver executando solicitações simultâneas em rotinas Go.
E se o Cloudflare atualizar seu mecanismo de desafio novamente?
Os desafios Turnstile e Cloudflare evoluem com o tempo. Acompanhe a documentação oficial do CapSolver e atualize seu tipo de solucionador, abordagem de código, cabeçalhos e estratégias de impressão digital à medida que as mudanças ocorrerem.
Projetar dados de verificação de histórico para agentes de verificação de IA com verificações de propósito permitido, registros conscientes de disputas, atualidade da fonte, revisão humana e registros de auditoria.

Crie dados de registros judiciais para agentes de pesquisa de IA com proveniência da fonte, verificações de censura, coleta sensível a taxas, recuperação de navegador limitada e revisão humana.
