Envie um token reCAPTCHA com HTTPX em Python
Use solution.token, o proxy que funcionou na resolução e a identidade do navegador retornada ao fazer o POST para o destino. Mantenha os cookies da aplicação em um único cliente HTTPX; um token válido não substitui os requisitos de sessão ou CSRF da aplicação.
Nesta página
Envie o token pronto pelo proxy que funcionou
Instale o HTTPX com pip install httpx. O exemplo também usa o SDK oficial de Python; consulte a configuração do SDK de Python se ele não estiver instalado.
O exemplo inclui a chamada de resolução para mostrar de onde vem o resultado. Se você já tem um resultado do SDK com status ready, reutilize-o como result junto com o request original. Não crie outra tarefa apenas para enviar o token dela.
- Defina
SOLVETHREE_API_KEYcom a chave de API do seu workspace eSOLVETHREE_PROXYcom a URL do proxy. Mantenha a chave de API no servidor. - Substitua
accounts.example.com, a açãologine a URL de envio pelos valores do destino pretendido. O hostname precisa de um perfil de site ativo no seu workspace; consulte a configuração do perfil do site. - Adapte os campos do formulário à solicitação real da aplicação. O exemplo envia apenas o campo de CAPTCHA, não um formulário de login completo.
# pip install httpx and the official solvethree SDK wheel.
import os
import httpx
from solvethree import Solvethree, successful_proxy
request = {"site": "accounts.example.com", "action": "login", "proxy": os.environ["SOLVETHREE_PROXY"]}
result = Solvethree(os.environ["SOLVETHREE_API_KEY"]).solve(request, timeout=180)
solution = result["solution"]
proxy = successful_proxy(request, result)
if proxy is None:
raise RuntimeError("No valid successful proxy")
with httpx.Client(proxy=proxy, timeout=30, follow_redirects=False, trust_env=False) as target:
# Use this client's cookie jar for any required application session first.
response = target.post("https://accounts.example.com/login",
data={"g-recaptcha-response": solution["token"]},
headers={"User-Agent": solution["userAgent"], "sec-ch-ua": solution["secChUa"]})
print("Application HTTP status:", response.status_code)
# Check the application's actual response and required CSRF/session fields.successful_proxy(request, result) seleciona o proxy a reutilizar no envio. Mantenha a verificação que interrompe o envio se nenhum proxy válido for retornado. Use o parâmetro atual do HTTPX no singular, proxy=, não proxies=. Definir trust_env=False impede que as configurações de proxy do ambiente alterem a rota selecionada explicitamente.
Mantenha cookies, identidade do navegador e campos do formulário juntos
Se a aplicação exigir uma solicitação inicial de página para estabelecer uma sessão ou obter um valor de CSRF, faça essa solicitação no mesmo cliente HTTPX antes do POST. O armazenamento de cookies dele mantém os cookies entre as solicitações. Um cliente separado não terá essa sessão automaticamente.
Use os valores retornados de userAgent e secChUa também nessas solicitações preliminares, não uma identidade de navegador sem relação com eles. O exemplo os fornece no POST como User-Agent e sec-ch-ua. Mantenha esses cabeçalhos e o proxy que funcionou consistentes ao enviar a solução ao destino pretendido.
data= envia dados de formulário. Aqui, g-recaptcha-response recebe solution.token; ele não deve receber o ID da tarefa nem o dicionário completo da solução. Use o nome de campo da solicitação real do destino e inclua as credenciais, os campos ocultos e o valor de CSRF necessários nesse mesmo envio.
Verifique os redirecionamentos antes de considerar o envio bem-sucedido
follow_redirects=False mantém a primeira resposta da aplicação visível. Se houver um redirecionamento, verifique o status e o destino antes de seguir explicitamente a próxima etapa esperada da aplicação com o mesmo cliente. Não reenvie o token automaticamente para outra URL.
O status HTTP exibido é apenas um ponto de partida. Verifique o corpo da resposta, o destino do redirecionamento ou o estado resultante da aplicação para determinar se o destino aceitou a solicitação. Uma resposta 200 ou um redirecionamento pode representar tanto sucesso quanto um fluxo de erro; o status ready do solvethree significa que uma solução foi gerada, não que o destino a aceitou.
Fontes e referência da API
Execute sua primeira tarefa.
Comece com $5 em créditos no espaço de trabalho.