เอกสารอ้างอิง 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}(ตัวเลขในตัวอย่างใช้เพื่อประกอบการอธิบายเท่านั้น)
แนวทางที่แนะนำ
หัวข้อที่มีชื่อว่า “แนวทางที่แนะนำ”- จำกัด “จำนวนคำขอที่รอผลลัพธ์พร้อมกัน” ในโปรแกรม เช่น ใช้ semaphore หรือ thread pool ขนาดคงที่ แทนที่จะควบคุมเพียงจำนวนที่ส่งต่อวินาที
- เมื่อได้รับ
ERROR_THREADS_MAXIMUMให้รอให้คำขอที่ส่งไปแล้วคืนค่าก่อนส่งคำขอใหม่ หรือรอ 1 ถึง 2 วินาทีแล้วลองใหม่ ห้ามลองซ้ำเป็นลูปทันที - ส่งงานจำนวนมากให้กระจายอย่างสม่ำเสมอ อย่าส่งงานนับพันนับหมื่นออกไปพร้อมกันในครั้งเดียว
ตัวอย่าง Python (asyncio):
import asyncioimport os
import aiohttp
CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]LIMIT = 15 # below your concurrency limitsem = 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_REQUEST_FORMATSERROR_TASK_ABSENTERROR_TASK_NOT_SUPPORTEDERROR_KEY_DOES_NOT_EXISTERROR_KEY_EXPIREDERROR_TASKID_INVALIDERROR_SETTLEMENT_FAILEDERROR_HIGH_DEMAND_DOMAINERROR_ZERO_CAPTCHA_FILESIZEERROR_TOO_BIG_CAPTCHA_FILESIZEERROR_IMAGE_TYPE_NOT_SUPPORTEDERROR_ILLEGAL_IMAGE
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"}แคชพารามิเตอร์ที่ไม่ถูกต้อง
หัวข้อที่มีชื่อว่า “แคชพารามิเตอร์ที่ไม่ถูกต้อง”ข้อผิดพลาดบางประเภทขึ้นอยู่กับพารามิเตอร์ของคำขอ ส่งพารามิเตอร์เดิมซ้ำก็ได้ผลลัพธ์เดิม:
ERROR_RECAPTCHA_INVALID_SITEKEYERROR_RECAPTCHA_INVALID_DOMAINERROR_INVALID_KEY_TYPEERROR_DOMAIN_NOT_ALLOWED
ข้อผิดพลาดเหล่านี้ไม่นับรวมการหยุดชั่วคราว แต่จะถูกแคชทั่วทั้งไซต์ โดยแคช 2 นาทีหลังตัดสินครั้งแรก และถ้าได้รับการยืนยันซ้ำภายใน 1 ชั่วโมงจะแคช 10 นาที ระหว่างที่แคชอยู่ คำขอเดียวกัน (ประเภทงานและ websiteKey เดียวกัน หรือโดเมนเว็บไซต์เดียวกัน) จะได้รับข้อผิดพลาดเดิมทันที ไม่หักพอยต์ และการตอบกลับมี "cached": true retryAfter (จำนวนวินาทีที่เหลือของแคช) และ badRequest (พารามิเตอร์ที่ตรงกัน) เมื่อแก้ websiteKey หรือเปลี่ยนประเภทงาน จะมีผลทันที
ความแตกต่างระหว่างขีดจำกัดงานพร้อมกันและการหยุดชั่วคราวอัตโนมัติ
หัวข้อที่มีชื่อว่า “ความแตกต่างระหว่างขีดจำกัดงานพร้อมกันและการหยุดชั่วคราวอัตโนมัติ”| ขีดจำกัดงานพร้อมกัน | หยุดชั่วคราวอัตโนมัติ | |
|---|---|---|
| สาเหตุ | มีงานที่กำลังประมวลผลพร้อมกันมากเกินไป | มีคำขอที่ผิดพลาดมากเกินไปในเวลาสั้น ๆ |
| ลักษณะที่เกิดขึ้น | ปฏิเสธเฉพาะคำขอส่วนที่เกิน โดยคืน ERROR_THREADS_MAXIMUM |
clientKey นี้ถูกหยุดการสร้างงานชั่วคราว โดยคืน ERROR_IP_BLOCKED_5MIN |
| การกลับมาใช้งาน | ส่งคำขอใหม่ได้ทันทีที่มีคำขอประมวลผลเสร็จ ส่วนขีดจำกัดที่ลดครึ่งหนึ่งชั่วคราวจะคืนค่าหลังผ่านไป 10 นาที | กลับมาใช้งานอัตโนมัติเมื่อครบกำหนด |
| หักพอยต์ | ไม่หัก | ไม่หัก |