İçeriğe geç
DurumPanel

API başvurusu

Eşzamanlı görev sınırı ve otomatik duraklatma

Bu sayfa Çince sürümden makine çevirisiyle hazırlanmıştır ve hatalar içerebilir. Geçerli olan Çince sürüm sürümüdür.

Tüm kullanıcılar için tanıma hızını korumak amacıyla YesCaptcha’da üç koruma kuralı vardır: hesap başına aynı anda işlenen görev sayısı sınırlanır (eşzamanlı görev sınırı); kısa sürede çok fazla hata üreten bir clientKey birkaç dakika duraklatılır (otomatik duraklatma); geçersiz olduğu belirlenmiş parametreler için bir süre boyunca aynı hata doğrudan döndürülür (geçersiz parametre önbelleği). Bu üç durumda da puan düşülmez.

Aynı anda işlenen görev sayısını hesap ve görev türü bazında sınırlıyoruz. Sınırlanan şey eşzamanlı görev sayısıdır, dakikadaki istek sayısı değildir.

  • Bir görev, createTask çağrısını yaptığınız andan bu çağrı dönene kadar “işleniyor” sayılır. Görsel tanıma türleri sonucu doğrudan createTask içinde döndürdüğü için eşzamanlı görev sayısı ≈ saniyede gönderilen görev sayısı × görev başına süre. Örneğin görev başına 0.5 saniye ve saniyede 40 görev gönderildiğinde eşzamanlı görev sayısı yaklaşık 20 olur.
  • Aynı hesaptaki istekler birlikte hesaplanır; her görev türü kendi başına hesaplanır.
  • Limiti aşan istekler hemen ERROR_THREADS_MAXIMUM döndürür; yanıttaki limit mevcut üst sınırınızdır. Puan düşülmez ve otomatik duraklatmaya sayılmaz.
  • Tanıma sunucuları yoğun olduğunda, en çok tanıma süresi kullanan hesabın o görev türündeki sınırı geçici olarak yarıya düşer ve 10 dakika sonra otomatik olarak eski haline döner. Bu yalnızca hız sınırlamasıdır, hesap duraklatılmaz.
  • Daha yüksek bir limit gerekiyorsa Destek ile iletişime geçin. Her türün varsayılan limiti belirlendiğinde bu sayfada ve Hizmet güncellemeleri sayfasında duyurulacaktır.
{
"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
}

(Örnekteki sayı yalnızca örnek amaçlıdır.)

  1. Yalnızca saniyedeki gönderimi sınırlamak yerine, programınızda “aynı anda sonuç bekleyen istek sayısını” sınırlayın; örneğin semafor (Semaphore) veya sabit boyutlu bir thread havuzu kullanın.
  2. ERROR_THREADS_MAXIMUM aldığınızda, gönderilmiş isteklerin dönmesini bekleyip yeni istek gönderin ya da 1-2 saniye bekleyip tekrar deneyin; döngüyle hemen yeniden denemeyin.
  3. Toplu görevleri düzenli aralıklarla gönderin; binlerce görevi aynı anda göndermeyin.

Python (asyncio) örneği:

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

Aynı clientKey kısa sürede çok sayıda hatalı istek ürettiğinde görev oluşturması otomatik olarak duraklatılır:

Tetikleyici Duraklatma süresi
Aynı takvim dakikası içinde aşağıda listelenen hatalardan toplam 100 tane 5 dakika
ERROR_IMAGE_TYPE_NOT_SUPPORTED hatasının 1 kez görülmesi 30 dakika
Aynı takvim dakikası içinde “geçersiz parametre önbelleği”ne 1,000 kez takılma 5 dakika

Duraklatmaya sayılan hatalar:

Hesabın eşzamanlı görev sınırı aşıldığında dönen ERROR_THREADS_MAXIMUM (limit alanıyla birlikte) sayılmaz; tanıma hizmeti yoğun olduğunda dönen aynı adlı hata (limit alanı olmadan) sayılır. Tanıma hatası (ERROR_CAPTCHA_UNSOLVABLE), yetersiz bakiye (ERROR_ZERO_BALANCE), eksik alan (ERROR_REQUIRED_FIELDS), desteklenmeyen soru (ERROR_UNKNOWN_QUESTION) gibi hatalar sayılmaz.

Duraklatma sırasında:

  • Yalnızca createTask ve getBalance etkilenir ve ERROR_IP_BLOCKED_5MIN döndürür. getTaskResult etkilenmez; duraklatmadan önce oluşturulan görevlerin sonuçları normal şekilde sorgulanabilir.
  • Yanıtta retryAfter (kalan saniye), blockReason (duraklatmayı tetikleyen hata kodu) ve blockDetail (o isteklerin türü, URL’si, sitekey değeri) bulunur; programınızı bunlara göre düzeltin.
  • İstek göndermeye devam etmek duraklatma süresini uzatmaz. Süre dolunca otomatik olarak kaldırılır, Destek ile iletişime geçmeniz gerekmez.
  • yescaptcha.com Panel’indeki genel bakış sayfasında son 24 saatteki duraklatma kayıtlarını görebilirsiniz.
{
"errorId": 1,
"errorCode": "ERROR_IP_BLOCKED_5MIN",
"errorDescription": "...",
"retryAfter": 182,
"blockReason": "ERROR_TASK_NOT_SUPPORTED"
}

Bazı hatalar istek parametrelerinden kaynaklanır ve aynı parametrelerle yeniden göndermek sonucu değiştirmez:

Bu hatalar otomatik duraklatmaya sayılmaz; bunun yerine tüm sitede önbelleğe alınır: ilk tespitten sonra 2 dakika, 1 saat içinde tekrar doğrulanırsa 10 dakika boyunca. Önbellek süresi içinde aynı istekler (aynı görev türü ve websiteKey, ya da aynı site alan adı) doğrudan asıl hatayı döndürür, puan düşülmez ve yanıtta "cached": true, retryAfter (önbellekte kalan saniye) ile badRequest (eşleşen parametreler) bulunur. websiteKey değerini düzeltmek veya görev türünü değiştirmek hemen etkili olur.

Eşzamanlı görev sınırı ile otomatik duraklatma arasındaki fark

Bölüm başlığı “Eşzamanlı görev sınırı ile otomatik duraklatma arasındaki fark”
Eşzamanlı görev sınırı Otomatik duraklatma
Neden Aynı anda işlenen görev çok fazla Kısa sürede çok fazla hatalı istek
Sonuç Yalnızca fazla olan istekler reddedilir, ERROR_THREADS_MAXIMUM Bu clientKey görev oluşturamaz, ERROR_IP_BLOCKED_5MIN
Düzelme Bir istek tamamlanır tamamlanmaz yenisi gönderilebilir; yarıya düşen limit 10 dakika sonra eski haline döner Süre dolunca otomatik olarak kalkar
Puan düşümü Yok Yok