Skip to content
CaptchAPI
Référence

Polling

À quelle fréquence interroger, quand abandonner, et comment lancer beaucoup de résolutions en parallèle.

Il n'y a ni webhook ni long-poll : vous créez une tâche et vous demandez le résultat jusqu'à ce qu'il soit prêt. Le schéma est simple, mais les choix de rythme décident si votre p95 ressemble au nôtre.

Rythme

  • Attendez environ 1,5 seconde avant la première interrogation. Rien ne se résout plus vite, donc une interrogation immédiate est un aller-retour perdu.
  • Ensuite, interrogez toutes les 0,5 seconde. Plus vite ne rapporte rien et risque ERROR_RATE_LIMIT ; plus lentement ajoute une latence que vous verrez dans vos propres métriques.
  • N'ajoutez pas de backoff exponentiel sur une tâche saine. Les temps de résolution sont en secondes, pas en minutes, et le backoff transforme une résolution de 2 s en 4 s.
  • En revanche, ralentissez bien à la réception d'un ERROR_RATE_LIMIT, en gardant le même taskId : la tâche tourne toujours.
Un client complet, échéance comprise
import time, requests

API, KEY = "https://api.captchapi.com", "YOUR_API_KEY"

def solve(task, first_delay=1.5, interval=0.5, timeout=120):
    created = requests.post(f"{API}/createTask",
                            json={"clientKey": KEY, "task": task}).json()
    if created["errorId"] != 0:
        raise RuntimeError(created["errorCode"])

    deadline = time.time() + timeout
    time.sleep(first_delay)

    while time.time() < deadline:
        r = requests.post(f"{API}/getTaskResult",
                          json={"clientKey": KEY,
                                "taskId": created["taskId"]}).json()

        if r.get("status") == "ready":
            return r["solution"]
        if r["errorId"] != 0 and r.get("errorCode") != "ERROR_RATE_LIMIT":
            raise RuntimeError(r["errorCode"])

        time.sleep(interval)

    raise TimeoutError("task did not resolve in time")

Échéances

Accordez 120 secondes à une tâche avant de l'abandonner. Turnstile et reCAPTCHA v3 se résolvent en quelques secondes ; les challenges hCaptcha à plusieurs tours forment la longue traîne et peuvent atteindre une demi-minute. Si votre propre budget de requête est plus serré, fixez une échéance client plus courte et traitez le dépassement comme un échec — la tâche reste remboursée chez nous quand elle expire.

En lancer beaucoup à la fois

Les tâches sont indépendantes : créez-les en parallèle et interrogez chacune sur son propre minuteur. Le plafond par défaut est de 100 tâches simultanées par clé. Mesuré sur notre VPS de production, un pool de six navigateurs termine dix tâches en 12,6 secondes de temps réel — environ 0,8 résolution par seconde — donc le débit dépend de notre capacité, pas de l'intensité de votre polling.

Interrogez chaque tâche selon son propre calendrier plutôt que de balayer toutes les tâches toutes les quelques secondes. Un balayage commun ajoute la moitié de son intervalle à la latence moyenne de chaque tâche.