
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.
Bangun API solver eCAPTCHA v2/v3 menggunakan CapSolver dan n8n. Pelajari cara mengotomatisasi penyelesaian token, mengirimkannya ke website, dan mengekstrak data yang dilindungi tanpa coding.

Descubra a melhor IA para resolver quebra-cabeças de imagens. Aprenda como os APIs ImageToText e o Vision Engine da CapSolver automatizam desafios visuais complexos com alta precisão.
