ข้ามไปยังเนื้อหา
สถานะแดชบอร์ด

เอกสารอ้างอิง API

ขีดจำกัดงานพร้อมกันและการหยุดชั่วคราวอัตโนมัติ

หน้านี้แปลด้วยเครื่องจากเวอร์ชันภาษาจีน อาจมีข้อผิดพลาด โปรดยึดเวอร์ชันภาษาจีนเป็นหลัก

เพื่อให้ทุกคนได้รับการจดจำที่รวดเร็ว YesCaptcha มีกฎป้องกันสามข้อ ได้แก่ จำกัดจำนวนงานที่กำลังประมวลผลพร้อมกันต่อบัญชี (ขีดจำกัดงานพร้อมกัน) clientKey เดียวกันที่เกิดข้อผิดพลาดมากเกินไปในเวลาสั้น ๆ จะถูกหยุดชั่วคราวไม่กี่นาที (หยุดชั่วคราวอัตโนมัติ) และพารามิเตอร์ที่ตัดสินแล้วว่าไม่ถูกต้องจะได้รับข้อผิดพลาดเดิมกลับทันทีในช่วงระยะเวลาหนึ่ง (แคชพารามิเตอร์ที่ไม่ถูกต้อง) ทั้งสามกรณีนี้ไม่หักพอยต์

เราจำกัดจำนวนงานที่กำลังประมวลผลในเวลาเดียวกันตามบัญชีและตามประเภทงาน โดยจำกัดจำนวนงานพร้อมกัน ไม่ใช่จำนวนคำขอต่อนาที

  • งานนับว่า “กำลังประมวลผล” ตั้งแต่เรียก createTask จนกว่าการเรียกนั้นจะคืนค่า ประเภทการจดจำภาพคืนผลลัพธ์ใน createTask โดยตรง ดังนั้น จำนวนงานพร้อมกัน ≈ จำนวนงานที่ส่งต่อวินาที × เวลาที่ใช้ต่องาน เช่น งานละ 0.5 วินาที ส่งวินาทีละ 40 งาน จำนวนงานพร้อมกันจะอยู่ที่ประมาณ 20
  • คำขอภายใต้บัญชีเดียวกันจะนับรวมกัน ส่วนแต่ละประเภทงานนับแยกกัน
  • คำขอที่เกินโควตาจะได้รับ ERROR_THREADS_MAXIMUM ทันที โดย limit ในการตอบกลับคือขีดจำกัดปัจจุบันของคุณ ไม่หักพอยต์ และไม่นับรวมการหยุดชั่วคราวอัตโนมัติ
  • เมื่อเซิร์ฟเวอร์จดจำทำงานไม่ทัน บัญชีที่ใช้เวลาจดจำมากที่สุดจะถูกลดขีดจำกัดของงานประเภทนั้นลงครึ่งหนึ่งชั่วคราว และคืนค่าอัตโนมัติหลังผ่านไป 10 นาที เป็นเพียงการจำกัดความเร็ว ไม่ได้หยุดบัญชีชั่วคราว
  • หากต้องการโควตาที่สูงขึ้น โปรดติดต่อฝ่ายสนับสนุน โควตาเริ่มต้นของแต่ละประเภทเมื่อกำหนดแล้วจะประกาศในหน้านี้และในบันทึกการอัปเดตบริการ
{
"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
}

(ตัวเลขในตัวอย่างใช้เพื่อประกอบการอธิบายเท่านั้น)

  1. จำกัด “จำนวนคำขอที่รอผลลัพธ์พร้อมกัน” ในโปรแกรม เช่น ใช้ semaphore หรือ thread pool ขนาดคงที่ แทนที่จะควบคุมเพียงจำนวนที่ส่งต่อวินาที
  2. เมื่อได้รับ ERROR_THREADS_MAXIMUM ให้รอให้คำขอที่ส่งไปแล้วคืนค่าก่อนส่งคำขอใหม่ หรือรอ 1 ถึง 2 วินาทีแล้วลองใหม่ ห้ามลองซ้ำเป็นลูปทันที
  3. ส่งงานจำนวนมากให้กระจายอย่างสม่ำเสมอ อย่าส่งงานนับพันนับหมื่นออกไปพร้อมกันในครั้งเดียว

ตัวอย่าง 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 เดียวกันที่สร้างคำขอผิดพลาดจำนวนมากในเวลาสั้น ๆ จะถูกหยุดการสร้างงานชั่วคราวโดยอัตโนมัติ:

เงื่อนไขที่ทำให้เกิด ระยะเวลาที่หยุดชั่วคราว
ข้อผิดพลาดที่ระบุด้านล่างสะสมครบ 100 ครั้งภายในนาทีปฏิทินเดียวกัน 5 นาที
เกิด ERROR_IMAGE_TYPE_NOT_SUPPORTED 1 ครั้ง 30 นาที
โดน “แคชพารามิเตอร์ที่ไม่ถูกต้อง” 1,000 ครั้งภายในนาทีปฏิทินเดียวกัน 5 นาที

ข้อผิดพลาดที่นับรวมการหยุดชั่วคราว:

ERROR_THREADS_MAXIMUM ที่คืนจากขีดจำกัดงานพร้อมกันของบัญชี (มีฟิลด์ limit) ไม่นับรวม ส่วนข้อผิดพลาดชื่อเดียวกันที่คืนเมื่อบริการจดจำไม่ว่าง (ไม่มี limit) จะนับรวม ส่วนการจดจำล้มเหลว (ERROR_CAPTCHA_UNSOLVABLE) ยอดคงเหลือไม่พอ (ERROR_ZERO_BALANCE) ฟิลด์ที่ขาด (ERROR_REQUIRED_FIELDS) และคำถามที่ไม่รองรับ (ERROR_UNKNOWN_QUESTION) เป็นต้น ไม่นับรวม

ระหว่างที่ถูกหยุดชั่วคราว:

  • ส่งผลเฉพาะ createTask และ getBalance ซึ่งจะคืน ERROR_IP_BLOCKED_5MIN ส่วน getTaskResult ไม่ได้รับผลกระทบ งานที่สร้างก่อนการหยุดชั่วคราวยังตรวจสอบผลลัพธ์ได้ตามปกติ
  • การตอบกลับมี retryAfter (เหลืออีกกี่วินาที) blockReason (รหัสข้อผิดพลาดที่ทำให้ถูกหยุดชั่วคราว) และ blockDetail (ประเภท URL และ sitekey ของคำขอลักษณะนั้น) ให้แก้โปรแกรมตามข้อมูลเหล่านี้
  • การส่งคำขอต่อไปไม่ทำให้ระยะเวลาหยุดชั่วคราวยาวขึ้น เมื่อครบกำหนดจะกลับมาใช้งานได้อัตโนมัติ ไม่ต้องติดต่อฝ่ายสนับสนุน
  • ในแดชบอร์ดของ yescaptcha.com ดูบันทึกการหยุดชั่วคราวในช่วง 24 ชั่วโมงล่าสุดได้
{
"errorId": 1,
"errorCode": "ERROR_IP_BLOCKED_5MIN",
"errorDescription": "...",
"retryAfter": 182,
"blockReason": "ERROR_TASK_NOT_SUPPORTED"
}

ข้อผิดพลาดบางประเภทขึ้นอยู่กับพารามิเตอร์ของคำขอ ส่งพารามิเตอร์เดิมซ้ำก็ได้ผลลัพธ์เดิม:

ข้อผิดพลาดเหล่านี้ไม่นับรวมการหยุดชั่วคราว แต่จะถูกแคชทั่วทั้งไซต์ โดยแคช 2 นาทีหลังตัดสินครั้งแรก และถ้าได้รับการยืนยันซ้ำภายใน 1 ชั่วโมงจะแคช 10 นาที ระหว่างที่แคชอยู่ คำขอเดียวกัน (ประเภทงานและ websiteKey เดียวกัน หรือโดเมนเว็บไซต์เดียวกัน) จะได้รับข้อผิดพลาดเดิมทันที ไม่หักพอยต์ และการตอบกลับมี "cached": true retryAfter (จำนวนวินาทีที่เหลือของแคช) และ badRequest (พารามิเตอร์ที่ตรงกัน) เมื่อแก้ websiteKey หรือเปลี่ยนประเภทงาน จะมีผลทันที

ความแตกต่างระหว่างขีดจำกัดงานพร้อมกันและการหยุดชั่วคราวอัตโนมัติ

หัวข้อที่มีชื่อว่า “ความแตกต่างระหว่างขีดจำกัดงานพร้อมกันและการหยุดชั่วคราวอัตโนมัติ”
ขีดจำกัดงานพร้อมกัน หยุดชั่วคราวอัตโนมัติ
สาเหตุ มีงานที่กำลังประมวลผลพร้อมกันมากเกินไป มีคำขอที่ผิดพลาดมากเกินไปในเวลาสั้น ๆ
ลักษณะที่เกิดขึ้น ปฏิเสธเฉพาะคำขอส่วนที่เกิน โดยคืน ERROR_THREADS_MAXIMUM clientKey นี้ถูกหยุดการสร้างงานชั่วคราว โดยคืน ERROR_IP_BLOCKED_5MIN
การกลับมาใช้งาน ส่งคำขอใหม่ได้ทันทีที่มีคำขอประมวลผลเสร็จ ส่วนขีดจำกัดที่ลดครึ่งหนึ่งชั่วคราวจะคืนค่าหลังผ่านไป 10 นาที กลับมาใช้งานอัตโนมัติเมื่อครบกำหนด
หักพอยต์ ไม่หัก ไม่หัก