Botion Grid Captcha
ภาพรวม
Botion เป็นแคปต์ชา การเลือกกริด: หน้าเพจจะแสดงภาพ ตัวอย่างอ้างอิง และ กริด 3×3 ของกระเบื้อง ตัวแก้ต้องคืนค่าว่าเซลล์กริดใดที่ตรงกับการอ้างอิง (ดัชนีฐาน 0, ลำดับแถว: ซ้ายไปขวา, บนลงล่าง)
🔲
ฟิลด์ task.image เข้ารหัสข้อมูล Base64 สอง ชุดที่เชื่อมด้วย | — ภาพ ตัวอย่าง ก่อน จากนั้นเป็นภาพ กริด

1. สร้างงาน
รูปแบบการส่งรูปภาพ
ภาพตัวอย่าง

ภาพกริด

คำขอ
POST https://api.achicaptcha.com/createTask
พารามิเตอร์
| ชื่อพารามิเตอร์ | ประเภทข้อมูล | จำเป็น? | คำอธิบาย |
|---|---|---|---|
clientKey | string | yes | API key |
task.type | string | yes | GridCaptcha |
task.subType | string | yes | botion |
task.image | string | yes | BASE64_SAMPLE_IMAGE|BASE64_GRID_IMAGE — ภาพตัวอย่างก่อน จากนั้น | จากนั้นภาพกริด 3×3 (ทั้งคู่เป็น Base64 ไม่มีคำนำหน้า data:) |
task.other | string | no | topk|grid_size ค่าเริ่มต้นคือ 3|3 หากไม่ระบุ |
ตัวอย่างคำขอ
POST /createTask HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "GridCaptcha",
"subType": "botion",
"image": "BASE64_SAMPLE_IMAGE|BASE64_GRID_IMAGE",
"other": "3|3"
}
}การตอบกลับ
เมื่อสำเร็จ เซิร์ฟเวอร์จะส่งคืน errorId = 0 และ taskId
{
"errorId": 0,
"taskId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}2. รับผลลัพธ์
คำขอ
POST https://api.achicaptcha.com/getTaskResult
พารามิเตอร์
| ชื่อพารามิเตอร์ | ประเภทข้อมูล | จำเป็น? | คำอธิบาย |
|---|---|---|---|
clientKey | string | yes | API key |
taskId | string | yes | TaskId ที่ได้จากขั้นตอน (1) |
ตัวอย่างคำขอ
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"taskId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}การตอบกลับ
{
"errorId": 0,
"status": "ready",
"solution": {
"click": "0,2,5"
}
}solution.click คือสตริงดัชนีเซลล์ฐาน 0 (ลำดับแถว) ที่คั่นด้วยเครื่องหมายจุลภาคสำหรับคลิกในกริด 3×3
คำอธิบายสถานะ
errorId = 0และstatus = ready: แก้ไขสำเร็จ อ่านดัชนีเซลล์ในsolution.clickerrorId = 0และstatus = processing: ยังประมวลผลอยู่ รอ 2 วินาทีแล้วตรวจสอบอีกครั้งerrorId > 0: ข้อผิดพลาดของระบบ ตรวจสอบerrorCodeและerrorDescription
ตัวอย่างการผสานรวม
import requests
import base64
import time
def solve_botion(sample_path, grid_path, api_key='YOUR_API_KEY', other='3|3'):
with open(sample_path, 'rb') as f:
sample_b64 = base64.b64encode(f.read()).decode()
with open(grid_path, 'rb') as f:
grid_b64 = base64.b64encode(f.read()).decode()
# ขั้นตอนที่ 1: สร้างงาน
create_resp = requests.post(
'https://api.achicaptcha.com/createTask',
json={
'clientKey': api_key,
'task': {
'type': 'GridCaptcha',
'subType': 'botion',
'image': f'{sample_b64}|{grid_b64}',
'other': other
}
}
)
result = create_resp.json()
if result['errorId'] != 0:
raise Exception(result['errorDescription'])
task_id = result['taskId']
# ขั้นตอนที่ 2: ตรวจสอบผลลัพธ์
while True:
time.sleep(2)
poll_resp = requests.post(
'https://api.achicaptcha.com/getTaskResult',
json={'clientKey': api_key, 'taskId': task_id}
)
result = poll_resp.json()
if result['errorId'] != 0:
raise Exception(result['errorDescription'])
if result['status'] == 'ready':
return result['solution']['click'] # e.g. "0,2,5"
# การใช้งาน
indices = solve_botion('sample.png', 'grid.png', 'YOUR_API_KEY')
print('เซลล์ที่ต้องคลิก:', indices)รหัสข้อผิดพลาดทั่วไป
| รหัสข้อผิดพลาด | คำอธิบาย | หมายเหตุ |
|---|---|---|
| 0 | success | สำเร็จ |
| 1 | processing | กำลังประมวลผล |
| 2 | missing required fields | ขาดฟิลด์ที่จำเป็น ตรวจสอบพารามิเตอร์ |
| 3 | task not supported | ประเภทงานไม่รองรับ |
| 4 | task creation failed | การสร้างงานล้มเหลว |
| 5 | client key does not exist | ไม่มี API key ตรวจสอบคีย์ |
| 6 | insufficient account balance | ยอดเงินในบัญชีไม่เพียงพอ เพิ่มเครดิต |
| 7 | task failed, please create a new task | งานล้มเหลว สร้างงานใหม่ |
| 8 | task ID does not exist | ไม่มี ID งาน |
แนวปฏิบัติที่ดีที่สุด
เพื่อผลลัพธ์ที่ดีที่สุดเมื่อใช้ Achicaptcha API สำหรับ Botion Grid Captcha ให้ปฏิบัติตามหลักการเหล่านี้:
1. ลำดับภาพ
- ส่งภาพ ตัวอย่าง (อ้างอิง) ก่อนเสมอ จากนั้น
|จากนั้นภาพ กริด - อย่ารวมคำนำหน้า
data:image/...;base64,— ใช้เฉพาะ Base64 ดิบ - ตรวจสอบว่าทั้งสองภาพโหลดและเข้ารหัสเสร็จสมบูรณ์ก่อนส่ง
2. พารามิเตอร์ task.other
- รูปแบบคือ
topk|grid_size(เช่น3|3) - หากไม่ระบุ ค่าเริ่มต้นคือ
3|3แต่ให้ตั้งค่าอย่างชัดเจนเสมอเพื่อหลีกเลี่ยงพฤติกรรมที่ไม่คาดคิด grid_sizeที่ไม่ถูกต้องจะทำให้การแมปดัชนีฐาน 0 ในsolution.clickผิดพลาด
3. ช่วงเวลาการสำรวจ
- รอเวลาอย่างน้อย 2 วินาทีระหว่างการตรวจสอบผลลัพธ์
- อย่าส่งคำขอซ้ำๆ ไปยัง API
- ตั้งค่าเวลาหมดอายุเพื่อหลีกเลี่ยงลูปไม่สิ้นสุด (แนะนำ: 60 วินาที)
4. การประมวลผลผลลัพธ์
solution.clickคือสตริงดัชนีเซลล์ฐาน 0 (ลำดับแถว, ซ้ายไปขวา, บนลงล่าง) ที่คั่นด้วยเครื่องหมายจุลภาค- แยกด้วย
,และแปลงเป็นจำนวนเต็มก่อนคลิกเซลล์กริดที่สอดคล้องกัน
5. ตรรกะการลองใหม่
- ใช้การลองใหม่สำหรับข้อผิดพลาดชั่วคราวเช่น
ERROR_NO_SLOT_AVAILABLE - ใช้ exponential backoff เมื่อลองใหม่
- จำกัดจำนวนการลองใหม่สูงสุด
6. ความปลอดภัยของคีย์ API
- อย่าฮาร์ดโค้ดคีย์ API ในซอร์สโค้ด
- ใช้ตัวแปรสภาพแวดล้อมหรือตัวจัดการความลับ
- อย่าเปิดเผยคีย์ API ทางฝั่งไคลเอนต์
ลิงก์ที่เป็นประโยชน์: