Demander un jeton reCAPTCHA Enterprise avec cURL

Par solvethree4 min de lecture

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_KEY sur 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_PROXY sur 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.com et login dans 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

cURL + jq · créer une tâche
# 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.

Exemple de réponse prête · identifiants fictifs
{
  "id": "example-task",
  "status": "ready",
  "solution": {
    "token": "EXAMPLE_TOKEN",
    "userAgent": "EXAMPLE_USER_AGENT",
    "secChUa": "EXAMPLE_CLIENT_HINTS"
  }
}
Que faire selon le statut de tâche renvoyé
Que faire selon le statut de tâche renvoyé
StatutAction suivante
pending ou solvingConservez 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.
readyCessez d’interroger la tâche et lisez solution.token, solution.userAgent et solution.secChUa.
failedCessez 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 :

API de tâches · récupérer une tâche existante
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.

Lancez votre première tâche.

Démarrez avec $5 de crédit dans votre espace de travail.

Créer un espace de travail
Demander un jeton reCAPTCHA Enterprise avec cURL · solvethree