Scarnox · Blog

API de solver de captcha: como funciona e como chamá-la

Uma API de solver de captcha é um serviço web que você chama por HTTP. Você envia os detalhes do captcha, que são o tipo de tarefa, o sitekey da página e a URL da página, e ela devolve um token que o site aceita como prova de que o desafio foi cumprido. O endpoint da Scarnox funciona assim e é síncrono, então uma única requisição já traz a resposta.

Este guia cobre a requisição, a resposta, o formato dos erros e os detalhes que decidem se uma integração se sustenta em produção. Se você quer um script executável primeiro, comece por Como resolver PopularCaptcha em Python.

O que a API faz e o que não faz

O seu código encontra o captcha em uma página, lê o sitekey e o envia ao solver. O solver devolve um token. O seu código escreve esse token no campo do formulário que o site espera e envia o formulário.

O solver não carrega a sua página, não clica em nada e não envia o seu formulário. Ele apenas produz o token. Ter essa fronteira em mente facilita o raciocínio sobre o resto da integração: tudo o que diz respeito à sua sessão, aos cookies e ao tempo das requisições continua no seu código.

Hoje o único tipo de tarefa disponível é o PopularCaptcha, proxyless, que é PopularCaptchaTaskProxyless. Outros tipos de captcha estão no roteiro. O guia dos tipos de captcha lista o que é o quê.

O endpoint

Envie uma requisição POST para:

POST https://api.scarnox.com/api/tasks/create
Authorization: Bearer scarnox_YOURAPIKEY
Content-Type: application/json

O corpo descreve a tarefa:

{
  "captcha_type": "PopularCaptchaTaskProxyless",
  "site_key": "10000000-ffff-ffff-ffff-000000000001",
  "site_url": "https://example.com/signup"
}

Os três campos obrigatórios são:

Existem três campos opcionais. proxy recebe um valor no formato http://user:pass@host:port e é usado com os tipos de tarefa com proxy. rqdata e is_invisible são para variantes específicas do widget. A lista completa de tipos de tarefa e detalhes de campos está na referência da API.

Síncrono significa sem polling

A chamada fica bloqueada até o token estar pronto. Você não faz polling, e não existe uma segunda requisição de "obter resultado" nesse fluxo. Defina o timeout do seu cliente HTTP em cerca de 185 segundos, para que uma resolução lenta não pareça uma falha de rede.

Em Python com a biblioteca requests, fica assim:

import requests

r = requests.post(
    "https://api.scarnox.com/api/tasks/create",
    headers={"Authorization": "Bearer scarnox_YOURAPIKEY"},
    json={
        "captcha_type": "PopularCaptchaTaskProxyless",
        "site_key": "10000000-ffff-ffff-ffff-000000000001",
        "site_url": "https://example.com/signup",
    },
    timeout=185,
)
data = r.json()

Leia a chave de uma variável de ambiente, em vez de escrevê-la no script. Quem puder ler o código-fonte não deve conseguir usar o seu saldo.

Lendo a resposta

Uma resolução bem-sucedida retorna errorId com valor 0, o token dentro de solution e um campo cost:

{"errorId": 0, "solution": {"token": "..."}, "cost": ...}

Uma resolução com falha retorna um errorId diferente de 0, além de um errorCode legível por máquina e um errorDescription legível por humanos:

{"errorId": 1, "errorCode": "...", "errorDescription": "..."}

Verifique o errorId no corpo em toda chamada. Não presuma que uma requisição HTTP concluída significa que você tem um token. A regra mais importante é esta: você só é cobrado quando errorId é 0. Resoluções com falha são gratuitas. Para os valores atuais, veja a página de preços.

Validade do token

Os tokens do PopularCaptcha expiram em cerca de dois minutos. Envie o token assim que o receber. Não guarde tokens para uso posterior e não resolva antes do envio do formulário. Se o seu código executa várias etapas entre obter o token e enviar o formulário, mova a resolução para o último momento possível.

Colocando o token no formulário

A maioria dos sites lê a resposta do PopularCaptcha de um campo de formulário chamado h-captcha-response. Muitos também aceitam g-recaptcha-response com o mesmo valor, então enviar os dois é uma escolha segura e comum:

requests.post("https://example.com/signup", data={
    "email": "you@example.com",
    "h-captcha-response": token,
    "g-recaptcha-response": token,
})

Se o formulário não aceitar o token, a causa geralmente é um sitekey ou uma URL de página que não correspondem à página em que o widget realmente estava. Confira os valores duas vezes antes de culpar o solver.

Tratamento de erros

Uma integração em produção precisa de um conjunto curto de boas práticas:

O guia de tratamento de erros e retentativas aprofunda cada um desses pontos.

Primeiros passos

Crie uma conta e você pode começar com crédito de teste grátis, sem cartão. Depois, execute a requisição acima em uma página de teste que você controla e confirme que o formulário aceita o token antes de conectá-lo a qualquer coisa importante.

Próximos passos