CAPSOLVER
Blog
Como Resolver o CAPTCHA do Cloudflare com Go em 2025

Como Resolver CAPTCHA do Cloudflare com Go em 2025

Logo of CapSolver

Adélia Cruz

Neural Network Developer

18-Feb-2025

Introdução

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.


Compreendendo o CAPTCHA Cloudflare Turnstile

Turnstile vs. Desafio Cloudflare

  • Turnstile: Um CAPTCHA focado na privacidade que executa verificações em segundo plano sem puzzles. Ele não gera nenhum cookie cf_clearance, confiando em vez disso na análise comportamental.
  • Desafio Cloudflare: O sistema mais antigo que emite desafios JavaScript e cookies cf_clearance após a verificação.
Turnstile vs. Desafio

Por que Go é ideal para resolução de CAPTCHA

  1. Velocidade e Concorrência: As goroutines do Go permitem tarefas de resolução de CAPTCHA em paralelo, reduzindo a latência em fluxos de trabalho de alto volume.
  2. Controle de Impressão Digital TLS: Bibliotecas como tls-client permitem a imitação precisa de handshakes TLS do navegador, evitando a impressão digital JA3/JA4.
  3. Escalabilidade: Binários compilados superam linguagens interpretadas como Python em scraping de uso intensivo de recursos.

Guia passo a passo: Resolvendo Turnstile com Go e CapSolver

Pré-requisitos

  1. Chave de API CapSolver: Cadastre-se em CapSolver e obtenha sua CLIENT_KEY.
  2. Ambiente Go: Instale Go ≥1.21 e dependências:
    bash Copy
    go get github.com/imroc/req/v3
    go get github.com/tidwall/gjson

Implementação do código

go Copy
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)
}

Explicação

  1. Criação de Tarefa: A função createTask envia uma solicitação para a API do CapSolver, especificando AntiTurnstileTaskProxyLess para Turnstile.
  2. Consulta de Resultado: getTaskResult verifica o status da tarefa a cada 3 segundos até que um token seja retornado.
  3. Uso do Token: O token obtido é enviado ao endpoint de login do site de destino para contornar o CAPTCHA.

Para mais informações, visite Documentação do Turnstile Solver.

Exemplo adicional: Resolvendo o Desafio Cloudflare Clássico (JS + cf_clearance)

Imagem do Desafio JS do Cloudflare

Implementação do código para o Desafio Cloudflare

go Copy
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.

Melhores práticas para 2025

1. Use Proxies Residenciais

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.

go Copy
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.

3. Lidar com impressões digitais TLS

Use curl-impersonate ou tls-client para replicar o handshake TLS do Chrome e evitar discrepâncias JA3.

4. Persistência de sessão

Reutilize cookies e cabeçalhos entre as solicitações para manter uma impressão digital consistente do navegador.

5. Monitore os códigos de erro

  • Erro 600010 do Capsolver: Tipo de tarefa incorreto (por exemplo, usando o solucionador Turnstile para um Desafio).
  • Erro 403: IP bloqueado — roteie proxies imediatamente.

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

FAQ: Problemas comuns ao resolver o CAPTCHA do Cloudflare em Go

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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.

  10. 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.


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