Teste a API de CAPTCHA com HTTPie
Use HTTPie para criar uma tarefa, salvar seu ID e depois consultar essa mesma tarefa. Registre um requestId antes do POST para que um tempo limite de conexão excedido não obrigue você a criar outra tarefa lógica.
Nesta página
Prepare a requisição
- Instale HTTPie e jq e execute o exemplo no Bash. Estes comandos usam o executável
httpdo HTTPie, não curl nem um alias de shell para curl. - Defina a variável de ambiente
SOLVETHREE_API_KEYcom a chave de API do seu espaço de trabalho. Execute em uma máquina confiável; mantenha a chave fora do código do navegador. - Configure um perfil ativo para o hostname de destino no console. Enviar um hostname e uma ação não cria um perfil. Consulte configuração do perfil do site.
- Substitua o hostname, a ação e a URL do proxy do exemplo. Use uma URL de proxy HTTP ou HTTPS sem caminho, query ou fragmento.
- Substitua o placeholder de requestId por um ID exclusivo para esta tarefa lógica: 1–64 letras ASCII, números, sublinhados ou hífens. Salve-o antes de enviar a requisição.
A requisição é para reCAPTCHA Enterprise: recaptchaType usa enterprise-v3 por padrão. Ela precisa de site, action e exatamente um dos campos proxy ou proxyCandidates; este exemplo usa um proxy. Não adicione os campos type nem url.
Crie a tarefa e salve seu ID
set -eu
umask 077
# Install HTTPie and jq. Keep the same request.json for recovery.
cat > request.json <<'JSON'
{
"site": "accounts.example.com",
"action": "login",
"proxy": "http://USER:PASSWORD@PROXY:PORT",
"requestId": "replace-with-one-unique-logical-task-id"
}
JSON
# This file contains proxy credentials; keep it private.
http --check-status --timeout=30 POST https://api.solvethree.com/v1/tasks \
Authorization:"Bearer $SOLVETHREE_API_KEY" waitMs==0 < request.json > task.json
TASK_ID=$(jq -r '.id' task.json)
http --check-status --timeout=30 GET "https://api.solvethree.com/v1/tasks/$TASK_ID" \
Authorization:"Bearer $SOLVETHREE_API_KEY" waitMs==15000
# pending/solving: retrieve the same ID again, within a finite deadline.
# ready: use solution. failed: stop and inspect errorCode/error.
# A timed-out POST is recovered with the unchanged file and requestId.As strings JSON entre aspas vão para request.json, que o HTTPie lê da entrada padrão. O cabeçalho Authorization envia sua chave usando autenticação Bearer. Mantenha request.json privado, pois ele contém credenciais do proxy.
waitMs==0 e waitMs==15000 são parâmetros de consulta do HTTPie, não campos do corpo JSON. O POST não solicita espera; o GET usa uma espera de 15,000 ms. A opção separada --timeout=30 do HTTPie define um tempo limite de 30 segundos no cliente.
A resposta do POST é salva em task.json, e o jq extrai seu id para o GET. Execute os comandos na ordem. set -eu interrompe o script se o HTTPie informar uma falha, antes que uma resposta incompleta possa ser usada na consulta.
Sucesso HTTP não significa solução pronta
--check-status detecta respostas HTTP sem sucesso. Trate-as antes de considerar o corpo como uma resposta bem-sucedida da tarefa. Uma requisição HTTP bem-sucedida ainda pode retornar uma tarefa inacabada ou com falha; em seguida, leia o status no JSON.
| Status | Próxima ação |
|---|---|
| pending ou solving | Consulte novamente o mesmo ID de tarefa, dentro de um prazo finito escolhido por você. Não crie outra tarefa só porque esta ainda não está pronta. |
| ready | Use a solução retornada. Este é o único status com uma solução utilizável. |
| failed | Pare de consultar e inspecione errorCode e error. Resoluções com falha são reembolsadas; não repita tentativas às cegas com as mesmas entradas inválidas. |
O exemplo faz uma única consulta, não um loop de consultas periódicas. Ao enviar uma solução pronta ao destino pretendido, use os valores retornados de userAgent e secChUa com o proxy que funcionou. Pronta significa que a solvethree gerou uma solução — não que a requisição da sua aplicação teve sucesso.
Recupere um POST que excedeu o tempo limite
Um tempo limite excedido no cliente não prova que a criação da tarefa falhou. Se você já tem o ID da tarefa, consulte-a. Se o POST excedeu o tempo limite antes de você receber um ID, execute o POST novamente com request.json inalterado, incluindo seu requestId original. O mesmo ID e as mesmas entradas retornam a tarefa existente.
Não extraia um ID de um task.json vazio ou incompleto; recupere o POST primeiro. Não altere o proxy, a ação nem outras entradas da tarefa ao reutilizar esse requestId — entradas diferentes causam conflito. Use um novo requestId somente quando quiser criar uma nova tarefa lógica.
Fontes e referência da API
Execute sua primeira tarefa.
Comece com $5 em créditos no espaço de trabalho.