Demander un jeton reCAPTCHA Enterprise avec cURL
Créez une tâche avec le nom d’hôte de votre site, l’action et le proxy. Si elle renvoie pending ou solving, interrogez la tâche à l’aide de l’ID renvoyé. Lisez le jeton dans solution.token uniquement lorsque le statut est ready.
Sur cette page
Préparer le site, la clé et le proxy
- Assurez-vous que cURL et jq sont disponibles dans votre shell.
- Définissez
SOLVETHREE_API_KEYsur la clé API de votre espace de travail. Exécutez ces commandes côté serveur ; ne placez pas la clé dans le code du navigateur. - Définissez
SOLVETHREE_PROXYsur l’URL du proxy que vous comptez utiliser pour la résolution et l’envoi du jeton. - Configurez un profil de site reCAPTCHA actif dans la console pour votre espace de travail. Remplacez
accounts.example.cometlogindans l’exemple par votre nom d’hôte et votre action.
Envoyer un nom d’hôte et une action ne crée pas de profil de site. Le profil doit déjà être actif avant de demander une résolution.
Créer la tâche avec une attente explicite
# Set SOLVETHREE_API_KEY and SOLVETHREE_PROXY in your environment first.
# Replace the hostname and action with your active site profile.
jq -n \
--arg proxy "$SOLVETHREE_PROXY" \
--arg requestId "login-$(date +%s)-$$" \
'{site:"accounts.example.com", action:"login", proxy:$proxy, requestId:$requestId}' \
| curl --fail-with-body --max-time 30 \
'https://api.solvethree.com/v1/tasks?waitMs=15000' \
-H "Authorization: Bearer $SOLVETHREE_API_KEY" \
-H 'Content-Type: application/json' \
--data-binary @-Le corps JSON fournit site, action et un seul proxy. Exactement un des deux champs proxy ou proxyCandidates est requis. N’ajoutez pas type ni url ; omettre recaptchaType sélectionne enterprise-v3.
Le paramètre de requête waitMs=15000 demande à la requête de création d’attendre jusqu’à 15 secondes. Il doit figurer dans l’URL, pas dans le corps JSON. Le délai d’expiration de cURL est de 30 secondes, ce qui laisse une marge au-delà de cette attente côté serveur pour les échanges réseau. La tâche peut encore être dans un état non terminal à l’arrivée de la réponse.
Lire la réponse et interroger les tâches non terminées
Vérifiez l’absence d’erreur HTTP avant d’interpréter le corps comme une réponse de tâche. Les deux commandes utilisent --fail-with-body ; traitez l’échec d’une requête HTTP séparément d’une tâche dont le statut est failed.
Une réponse prête présente cette structure. Les valeurs ci-dessous sont des exemples fictifs, pas un jeton que vous pouvez envoyer.
{
"id": "example-task",
"status": "ready",
"solution": {
"token": "EXAMPLE_TOKEN",
"userAgent": "EXAMPLE_USER_AGENT",
"secChUa": "EXAMPLE_CLIENT_HINTS"
}
}| Statut | Action suivante |
|---|---|
| pending ou solving | Conservez l’id renvoyé et récupérez la même tâche. Aucune solution utilisable n’est encore disponible ; ne créez pas de tâche de remplacement. |
| ready | Cessez d’interroger la tâche et lisez solution.token, solution.userAgent et solution.secChUa. |
| failed | Cessez d’interroger la tâche et examinez errorCode et error. Les résolutions échouées sont remboursées. Corrigez la cause avant de démarrer une autre tâche. |
Pour une réponse non terminale, définissez TASK_ID dans votre environnement sur la valeur id renvoyée, puis récupérez la tâche :
curl --fail-with-body --max-time 30 \
"https://api.solvethree.com/v1/tasks/$TASK_ID?waitMs=15000" \
-H "Authorization: Bearer $SOLVETHREE_API_KEY"Ce GET attend un résultat pendant 15 secondes au maximum, avec un délai d’expiration HTTP de 30 secondes. Sans waitMs, GET renvoie une réponse sans attendre. Répétez le GET uniquement tant que le statut est pending ou solving, et définissez une limite de temps globale dans le code appelant pour empêcher la boucle d’interrogation de s’exécuter indéfiniment.
Si la tâche échoue, utilisez les détails de son erreur plutôt que de supposer un problème de crédit. Par exemple, site-unreachable exige de vérifier l’accessibilité de la cible, et non de renvoyer aveuglément des paramètres inchangés.
Envoyer le jeton
Utilisez solution.token dans la requête adressée à l’application cible. L’id de la tâche sert uniquement à récupérer la tâche ; ce n’est pas le jeton CAPTCHA. L’emplacement du jeton dépend du formulaire ou de l’API de la cible : il n’existe donc pas de commande universelle pour l’envoyer à la cible.
Utilisez les valeurs solution.userAgent et solution.secChUa renvoyées, ainsi que le proxy ayant permis la résolution, lors de l’envoi du jeton. Avec l’exemple à proxy unique ci-dessus, utilisez le même SOLVETHREE_PROXY. N’utilisez pas une identité de navigateur ou une URL cible sans rapport.
ready signifie que solvethree a généré une solution. Vérifiez séparément la réponse de l’application cible pour déterminer si elle a accepté votre requête.
Autres questions
Est-ce la même chose que l’API siteverify de Google ?
Non. L’API siteverify de Google vérifie un jeton existant et nécessite le secret de vérification du propriétaire du site. L’API solvethree génère une solution à l’aide de la clé API de votre espace de travail. N’incluez pas de secret de vérification Google dans la requête de tâche.
Sources et référence de l’API
Lancez votre première tâche.
Démarrez avec $5 de crédit dans votre espace de travail.