Lewati ke konten
StatusDasbor

Referensi API

Batas tugas bersamaan dan jeda otomatis

Halaman ini diterjemahkan otomatis dari versi bahasa Mandarin dan mungkin mengandung kesalahan. Versi bahasa Mandarin menjadi acuan utama.

Agar pengenalan tetap cepat bagi semua pengguna, YesCaptcha memiliki tiga aturan perlindungan: jumlah tugas yang sedang diproses bersamaan dibatasi per akun (batas tugas bersamaan); clientKey yang menghasilkan terlalu banyak error dalam waktu singkat akan dijeda beberapa menit (jeda otomatis); dan parameter yang sudah dinyatakan tidak valid langsung mengembalikan error yang sama selama beberapa waktu (cache parameter tidak valid). Ketiga kondisi ini tidak menyebabkan pemotongan poin.

Kami membatasi jumlah tugas yang sedang diproses pada saat yang sama per akun dan per jenis tugas. Yang dibatasi adalah jumlah tugas bersamaan, bukan jumlah permintaan per menit.

  • Tugas dihitung “sedang diproses” sejak createTask dipanggil sampai panggilan itu mengembalikan respons. Jenis pengenalan gambar mengembalikan hasil langsung di createTask, sehingga tugas bersamaan ≈ jumlah tugas yang dikirim per detik × durasi tiap tugas. Contoh: tiap tugas 0.5 detik dan 40 tugas dikirim per detik, maka tugas bersamaan sekitar 20.
  • Permintaan dari akun yang sama dihitung bersama; setiap jenis tugas dihitung sendiri-sendiri.
  • Permintaan yang melebihi kuota langsung mengembalikan ERROR_THREADS_MAXIMUM, dan limit di respons adalah batas Anda saat ini. Tidak ada pemotongan poin, dan tidak dihitung untuk jeda otomatis.
  • Saat server pengenalan kewalahan, akun yang memakai waktu pengenalan terbanyak akan mengalami batas untuk jenis tugas tersebut dikurangi setengah sementara, lalu pulih otomatis setelah 10 menit. Ini hanya pembatasan kecepatan, akun tidak dijeda.
  • Jika Anda membutuhkan kuota lebih tinggi, hubungi dukungan. Setelah kuota default tiap jenis ditetapkan, angkanya akan diumumkan di halaman ini dan di catatan pembaruan layanan.
{
"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
}

(Angka dalam contoh hanya ilustrasi.)

  1. Batasi “jumlah permintaan yang menunggu hasil secara bersamaan” di program Anda, misalnya dengan semaphore atau thread pool berukuran tetap, bukan hanya mengatur berapa permintaan dikirim per detik.
  2. Setelah menerima ERROR_THREADS_MAXIMUM, tunggu permintaan yang sudah dikirim selesai sebelum mengirim yang baru, atau tunggu 1 sampai 2 detik lalu coba lagi. Jangan mengulang dalam loop tanpa jeda.
  3. Kirim tugas batch secara merata, jangan mengirim ribuan tugas sekaligus.

Contoh 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

clientKey yang menghasilkan banyak permintaan error dalam waktu singkat akan dijeda dari pembuatan tugas secara otomatis:

Pemicu Durasi jeda
Error yang tercantum di bawah terkumpul 100 kali dalam satu menit kalender yang sama 5 menit
ERROR_IMAGE_TYPE_NOT_SUPPORTED muncul 1 kali 30 menit
Mengenai “cache parameter tidak valid” 1,000 kali dalam satu menit kalender yang sama 5 menit

Error yang dihitung untuk jeda:

ERROR_THREADS_MAXIMUM yang dikembalikan karena kelebihan tugas bersamaan di akun (dengan field limit) tidak dihitung; error dengan nama yang sama yang dikembalikan saat layanan pengenalan sibuk (tanpa limit) dihitung. Kegagalan pengenalan (ERROR_CAPTCHA_UNSOLVABLE), saldo tidak cukup (ERROR_ZERO_BALANCE), field yang kurang (ERROR_REQUIRED_FIELDS), pertanyaan yang tidak didukung (ERROR_UNKNOWN_QUESTION), dan sejenisnya tidak dihitung.

Selama jeda:

  • Hanya createTask dan getBalance yang terpengaruh, keduanya mengembalikan ERROR_IP_BLOCKED_5MIN. getTaskResult tidak terpengaruh; tugas yang dibuat sebelum jeda tetap bisa diperiksa hasilnya.
  • Respons memuat retryAfter (sisa detik), blockReason (kode error pemicu jeda), dan blockDetail (jenis, URL, dan sitekey dari permintaan tersebut). Gunakan ketiganya untuk memperbaiki program Anda.
  • Terus mengirim permintaan tidak memperpanjang jeda. Jeda berakhir otomatis, tidak perlu menghubungi dukungan.
  • Di Dasbor yescaptcha.com, halaman Ringkasan menampilkan catatan jeda 24 jam terakhir.
{
"errorId": 1,
"errorCode": "ERROR_IP_BLOCKED_5MIN",
"errorDescription": "...",
"retryAfter": 182,
"blockReason": "ERROR_TASK_NOT_SUPPORTED"
}

Sebagian error ditentukan oleh parameter permintaan, sehingga mengirim ulang dengan parameter yang sama memberi hasil yang sama:

Error ini tidak dihitung untuk jeda otomatis, tetapi di-cache di seluruh situs: 2 menit setelah penilaian pertama, dan 10 menit jika dikonfirmasi lagi dalam 1 jam. Selama cache berlaku, permintaan yang sama (jenis tugas dan websiteKey yang sama, atau domain situs yang sama) langsung mengembalikan error semula tanpa pemotongan poin, dengan "cached": true, retryAfter (sisa detik cache), dan badRequest (parameter yang terkena). Setelah websiteKey diperbaiki atau jenis tugas diganti, perubahan langsung berlaku.

Perbedaan batas tugas bersamaan dan jeda otomatis

Section titled “Perbedaan batas tugas bersamaan dan jeda otomatis”
Batas tugas bersamaan Jeda otomatis
Penyebab Terlalu banyak tugas yang diproses bersamaan Terlalu banyak permintaan error dalam waktu singkat
Dampak Hanya permintaan yang berlebih yang ditolak, ERROR_THREADS_MAXIMUM clientKey ini dijeda dari pembuatan tugas, ERROR_IP_BLOCKED_5MIN
Pemulihan Begitu ada permintaan selesai, Anda bisa mengirim yang baru; batas yang dikurangi setengah pulih setelah 10 menit Pulih otomatis saat jeda berakhir
Pemotongan poin Tidak ada Tidak ada