Scarnox · Blog

Captcha solver API: วิธีทำงานและวิธีเรียกใช้

captcha solver API คือบริการเว็บที่คุณเรียกผ่าน HTTP คุณส่งรายละเอียดของ captcha ไป ได้แก่ ประเภทงาน sitekey ของหน้า และ URL ของหน้า แล้วมันส่ง token กลับมา ซึ่งเว็บปลายทางยอมรับเป็นหลักฐานว่าการท้าทายผ่านแล้ว endpoint ของ Scarnox ทำงานแบบ synchronous จึงได้คำตอบในคำขอเดียว

คู่มือนี้ครอบคลุมคำขอ การตอบกลับ รูปแบบข้อผิดพลาด และรายละเอียดที่ตัดสินว่าการเชื่อมต่อจะทนอยู่ในโปรดักชันได้หรือไม่ หากคุณต้องการสคริปต์ที่รันได้ก่อน ให้เริ่มจาก วิธีแก้ PopularCaptcha ด้วย Python

API ทำอะไรและไม่ทำอะไร

โค้ดของคุณหา captcha ในหน้า อ่าน sitekey และส่งให้ solver solver ส่ง token กลับมา โค้ดของคุณเขียน token นั้นลงในฟิลด์ฟอร์มที่เว็บคาดหวังและ submit ฟอร์ม

solver ไม่ได้โหลดหน้าของคุณ ไม่ได้คลิกอะไร และไม่ได้ submit ฟอร์มของคุณ มันสร้าง token เท่านั้น การจำขอบเขตนี้ไว้ทำให้เรื่องที่เหลือของการเชื่อมต่อเข้าใจง่ายขึ้น ทุกอย่างเกี่ยวกับ session, cookie และจังหวะเวลาของคำขออยู่ในโค้ดของคุณ

ปัจจุบันประเภทงานที่ใช้งานได้แบบสดเพียงประเภทเดียวคือ PopularCaptcha แบบ proxyless ซึ่งก็คือ PopularCaptchaTaskProxyless ประเภท captcha อื่นอยู่ในแผนงาน คู่มือประเภทของ captcha บอกว่าแต่ละประเภทอยู่ในสถานะใด

endpoint

ส่งคำขอ POST ไปที่:

POST https://api.scarnox.com/api/tasks/create
Authorization: Bearer scarnox_YOURAPIKEY
Content-Type: application/json

body อธิบายงาน:

{
  "captcha_type": "PopularCaptchaTaskProxyless",
  "site_key": "10000000-ffff-ffff-ffff-000000000001",
  "site_url": "https://example.com/signup"
}

ฟิลด์ที่จำเป็นสามฟิลด์คือ

มีฟิลด์ที่ไม่บังคับสามฟิลด์ proxy รับค่าในรูปแบบ http://user:pass@host:port และใช้กับประเภทงานที่เกี่ยวกับ proxy ส่วน rqdata และ is_invisible ใช้กับ widget รูปแบบเฉพาะ รายการเต็มของประเภทงานและรายละเอียดฟิลด์อยู่ใน เอกสาร API

synchronous หมายถึงไม่ต้อง polling

การเรียกจะบล็อกจนกว่า token จะพร้อม คุณไม่ต้อง polling และไม่มีคำขอ "get result" ที่สองในโฟลว์นี้ ตั้ง timeout ของ HTTP client ไว้ประมาณ 185 วินาที เพื่อไม่ให้การแก้ที่ช้าถูกมองเป็นความล้มเหลวของเครือข่าย

ใน Python กับไลบรารี requests เป็นดังนี้

import requests

r = requests.post(
    "https://api.scarnox.com/api/tasks/create",
    headers={"Authorization": "Bearer scarnox_YOURAPIKEY"},
    json={
        "captcha_type": "PopularCaptchaTaskProxyless",
        "site_key": "10000000-ffff-ffff-ffff-000000000001",
        "site_url": "https://example.com/signup",
    },
    timeout=185,
)
data = r.json()

อ่าน key จาก environment variable แทนการเขียนลงในสคริปต์ ใครก็ตามที่อ่านซอร์สโค้ดได้ไม่ควรใช้ยอดเงินของคุณได้

การอ่านการตอบกลับ

การแก้ที่สำเร็จจะส่ง errorId เป็น 0 พร้อม token อยู่ใน solution และฟิลด์ cost

{"errorId": 0, "solution": {"token": "..."}, "cost": ...}

การแก้ที่ล้มเหลวจะส่ง errorId ที่ไม่ใช่ 0 พร้อม errorCode ที่เครื่องอ่านได้ และ errorDescription ที่มนุษย์อ่านได้

{"errorId": 1, "errorCode": "...", "errorDescription": "..."}

ตรวจสอบ errorId ในเนื้อหาทุกครั้งที่เรียก อย่าสมมติว่าคำขอ HTTP ที่เสร็จสิ้นหมายความว่าคุณได้ token แล้ว กฎที่สำคัญที่สุดคือ คุณจะถูกเรียกเก็บเงินเฉพาะเมื่อ errorId เป็น 0 การแก้ที่ล้มเหลวไม่มีค่าใช้จ่าย สำหรับอัตราปัจจุบัน ดูหน้าราคา

อายุของ token

token ของ PopularCaptcha หมดอายุภายในประมาณสองนาที ส่ง token ทันทีที่ได้รับ อย่าแคชไว้ใช้ภายหลัง และอย่าแก้ล่วงหน้าก่อนการ submit ฟอร์ม หากโค้ดของคุณทำหลายขั้นตอนระหว่างการได้ token กับการโพสต์ฟอร์ม ให้ย้ายการแก้ไปไว้ในช่วงท้ายสุด

ใส่ token ลงในฟอร์ม

เว็บส่วนใหญ่อ่านการตอบกลับของ PopularCaptcha จากฟิลด์ฟอร์มชื่อ h-captcha-response หลายเว็บยังรับ g-recaptcha-response ที่มีค่าเดียวกัน การส่งทั้งสองฟิลด์จึงเป็นทางเลือกที่ปลอดภัยที่พบบ่อย

requests.post("https://example.com/signup", data={
    "email": "you@example.com",
    "h-captcha-response": token,
    "g-recaptcha-response": token,
})

หากฟอร์มไม่ยอมรับ token สาเหตุมักเป็น sitekey หรือ URL ของหน้าที่ไม่ตรงกับหน้าที่ widget อยู่จริง ตรวจสอบค่าให้ดีก่อนจะโทษ solver

การจัดการข้อผิดพลาด

การเชื่อมต่อในโปรดักชันต้องมีนิสัยไม่กี่อย่าง

คู่มือการลองใหม่และการจัดการข้อผิดพลาด ลงลึกในแต่ละข้อนี้มากกว่า

เริ่มต้นใช้งาน

สร้างบัญชี แล้วคุณจะเริ่มด้วยเครดิตทดลองใช้ฟรี ไม่ต้องใช้บัตร จากนั้นรันคำขอด้านบนกับหน้าทดสอบที่คุณควบคุม และตรวจสอบว่าฟอร์มยอมรับ token ก่อนเชื่อมต่อกับสิ่งที่สำคัญ

ขั้นตอนถัดไป