Zum Inhalt springen
StatusDashboard

API-Referenz

Limit gleichzeitiger Aufgaben und automatische Pausierung

Diese Seite wurde maschinell aus der chinesischen Version übersetzt und kann Fehler enthalten. Maßgeblich ist die chinesische Version.

Damit die Erkennung für alle Nutzer schnell bleibt, gibt es bei YesCaptcha drei Schutzregeln: ein Limit für die Anzahl der Aufgaben, die ein Konto gleichzeitig in Bearbeitung hat (Limit gleichzeitiger Aufgaben), eine kurze Pausierung eines clientKey, der in kurzer Zeit zu viele Fehler erzeugt (automatische Pausierung), und einen Cache für bereits als ungültig erkannte Parameter, der für einige Zeit direkt den ursprünglichen Fehler zurückgibt. In allen drei Fällen erfolgt kein Punkteabzug.

Wir begrenzen pro Konto und pro Aufgabentyp die Anzahl der Aufgaben, die gleichzeitig in Bearbeitung sind. Begrenzt wird die Gleichzeitigkeit, nicht die Anzahl der Anfragen pro Minute.

  • Eine Aufgabe gilt ab dem Aufruf von createTask bis zur Rückkehr dieses Aufrufs als „in Bearbeitung“. Typen der Bilderkennung liefern das Ergebnis direkt in createTask, daher gilt: Gleichzeitigkeit ≈ pro Sekunde gesendete Aufgaben × Dauer pro Aufgabe. Beispiel: Bei 0.5 Sekunden pro Aufgabe und 40 Aufgaben pro Sekunde liegt die Gleichzeitigkeit bei etwa 20.
  • Anfragen desselben Kontos werden zusammengerechnet; jeder Aufgabentyp wird getrennt gezählt.
  • Anfragen über dem Limit liefern sofort ERROR_THREADS_MAXIMUM. Das Feld limit in der Antwort enthält Ihr aktuelles Limit. Es erfolgt kein Punkteabzug, und die Anfragen zählen nicht für die automatische Pausierung.
  • Wenn die Erkennungsserver überlastet sind, wird das Limit für diesen Aufgabentyp bei dem Konto, das die meiste Erkennungszeit beansprucht, vorübergehend halbiert und nach 10 Minuten automatisch wiederhergestellt. Das bremst nur, das Konto wird nicht pausiert.
  • Wenn Sie ein höheres Limit benötigen, wenden Sie sich an den Support. Sobald die Standardlimits der einzelnen Typen feststehen, werden sie auf dieser Seite und im Änderungsprotokoll des Dienstes veröffentlicht.
{
"errorId": 1,
"errorCode": "ERROR_THREADS_MAXIMUM",
"errorDescription": "This account already has 30 tasks of this type in progress, which is the limit. Lower the concurrency and wait for pending requests to return before sending more; rejected requests are not charged and do not lead to a block.",
"limit": 30
}

(Die Zahlen im Beispiel dienen nur der Veranschaulichung.)

  1. Begrenzen Sie im Programm die Anzahl der Anfragen, die gleichzeitig auf ein Ergebnis warten, zum Beispiel mit einem Semaphor (Semaphore) oder einem Thread-Pool fester Größe, statt nur die Anzahl pro Sekunde zu steuern.
  2. Warten Sie nach ERROR_THREADS_MAXIMUM, bis bereits gesendete Anfragen zurückgekehrt sind, bevor Sie neue senden, oder versuchen Sie es nach 1 bis 2 Sekunden erneut. Wiederholen Sie nicht sofort in einer Schleife.
  3. Senden Sie Stapelaufgaben gleichmäßig verteilt und nicht Tausende oder Zehntausende auf einmal.

Beispiel in Python (asyncio):

import asyncio
import os
import aiohttp
CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]
LIMIT = 15 # below your concurrency limit
sem = asyncio.Semaphore(LIMIT)
async def solve(session, task):
async with sem: # at most LIMIT requests in progress at a time
result = {}
for attempt in range(5):
async with session.post(
"https://api.yescaptcha.com/createTask",
json={"clientKey": CLIENT_KEY, "task": task},
) as resp:
result = await resp.json()
if result.get("errorCode") != "ERROR_THREADS_MAXIMUM":
return result
await asyncio.sleep(1 + attempt) # over the limit: wait and retry
return result

Erzeugt derselbe clientKey in kurzer Zeit viele fehlerhafte Anfragen, wird das Erstellen von Aufgaben automatisch pausiert:

Auslöser Dauer der Pausierung
Innerhalb derselben Kalenderminute 100 der unten aufgeführten Fehler 5 Minuten
ERROR_IMAGE_TYPE_NOT_SUPPORTED tritt 1 Mal auf 30 Minuten
Innerhalb derselben Kalenderminute 1000 Treffer im „Cache für ungültige Parameter“ 5 Minuten

Fehler, die zur Pausierung zählen:

ERROR_THREADS_MAXIMUM, das durch das Limit gleichzeitiger Aufgaben des Kontos zurückgegeben wird (mit dem Feld limit), zählt nicht mit; der gleichnamige Fehler bei überlasteter Erkennung (ohne limit) zählt mit. Nicht mit zählen unter anderem fehlgeschlagene Erkennungen (ERROR_CAPTCHA_UNSOLVABLE), unzureichendes Guthaben (ERROR_ZERO_BALANCE), fehlende Felder (ERROR_REQUIRED_FIELDS) und nicht unterstützte Fragen (ERROR_UNKNOWN_QUESTION).

Während der Pausierung gilt:

  • Betroffen sind nur createTask und getBalance; sie liefern ERROR_IP_BLOCKED_5MIN. getTaskResult ist nicht betroffen: Vor der Pausierung erstellte Aufgaben können weiterhin abgefragt werden.
  • Die Antwort enthält retryAfter (verbleibende Sekunden), blockReason (der Fehlercode, der die Pausierung ausgelöst hat) und blockDetail (Typ, URL und sitekey dieser Anfragen). Korrigieren Sie Ihr Programm anhand dieser Angaben.
  • Weitere Anfragen verlängern die Pausierung nicht. Sie endet automatisch, Sie müssen den Support nicht kontaktieren.
  • Im Dashboard auf yescaptcha.com sehen Sie die Pausierungen der letzten 24 Stunden.
{
"errorId": 1,
"errorCode": "ERROR_IP_BLOCKED_5MIN",
"errorDescription": "...",
"retryAfter": 182,
"blockReason": "ERROR_TASK_NOT_SUPPORTED"
}

Manche Fehler hängen von den Anfrageparametern ab; ein erneutes Senden mit denselben Parametern ändert das Ergebnis nicht:

Diese Fehler zählen nicht für die automatische Pausierung, sondern werden seitenweit zwischengespeichert: nach der ersten Feststellung für 2 Minuten, bei erneuter Bestätigung innerhalb von 1 Stunde für 10 Minuten. Während der Cache-Dauer liefern gleiche Anfragen (gleicher Aufgabentyp und gleicher websiteKey oder gleiche Website-Domain) direkt den ursprünglichen Fehler, ohne Punkteabzug; die Antwort enthält "cached": true, retryAfter (verbleibende Sekunden im Cache) und badRequest (der betroffene Parameter). Nach Korrektur des websiteKey oder einem Wechsel des Aufgabentyps wirkt sich das sofort aus.

Unterschied zwischen Limit gleichzeitiger Aufgaben und automatischer Pausierung

Abschnitt betitelt „Unterschied zwischen Limit gleichzeitiger Aufgaben und automatischer Pausierung“
Limit gleichzeitiger Aufgaben Automatische Pausierung
Ursache Zu viele Aufgaben gleichzeitig in Bearbeitung Zu viele fehlerhafte Anfragen in kurzer Zeit
Verhalten Nur die überzähligen Anfragen werden abgelehnt, ERROR_THREADS_MAXIMUM Dieser clientKey kann keine Aufgaben mehr erstellen, ERROR_IP_BLOCKED_5MIN
Wiederherstellung Sobald Anfragen abgeschlossen sind, können neue gesendet werden; ein halbiertes Limit kehrt nach 10 Minuten zurück Endet automatisch
Punkteabzug Nein Nein