Jenis tugas
Cloudflare Turnstile
Halaman ini diterjemahkan otomatis dari versi bahasa Mandarin dan mungkin mengandung kesalahan. Versi bahasa Mandarin menjadi acuan utama.
Tugas Cloudflare Turnstile mengembalikan sebuah token (token) yang dikirim ke situs target untuk lolos verifikasi. TurnstileTaskProxyless berharga 25 poin (≈ $3.75 / 1k) per tugas dan bersifat asinkron: panggil createTask terlebih dahulu, lalu getTaskResult setiap 5 detik. Jika gagal atau waktu habis, poin dikembalikan otomatis.
https://api.yescaptcha.com/createTaskEndpoint globalhttps://cn.yescaptcha.com/createTaskEndpoint TiongkokBody permintaan berupa JSON, diautentikasi dengan clientKey. Hasil harus dicek di endpoint yang sama dengan tempat tugas dibuat.
Kapan digunakan
Section titled “Kapan digunakan”Halaman web memiliki kotak verifikasi Cloudflare (“Pastikan Anda adalah manusia”) yang tertanam di dalam formulir, dan halaman memuat skrip dari challenges.cloudflare.com/turnstile.
Jika seluruh halaman diblokir Cloudflare dan menampilkan “Just a moment…” atau “Checking your browser”, itu adalah halaman verifikasi Cloudflare, bukan Turnstile. Gunakan Halaman verifikasi Cloudflare. Perbedaannya dijelaskan di Mengenali jenis captcha.
Jenis tugas dan harga
Section titled “Jenis tugas dan harga”| Jenis tugas | Harga | Mode | Catatan |
|---|---|---|---|
TurnstileTaskProxyless | $3.75 / 1k; 25 poin/tugas · ¥25 / 1k | Asinkron | |
TurnstileTaskProxylessM1 | $4.50 / 1k; 30 poin/tugas · ¥30 / 1k | Asinkron | |
TurnstileTask | $3.75 / 1k; 25 poin/tugas · ¥25 / 1k | Asinkron | Proxy sendiri |
Harga dalam dolar AS adalah perkiraan dengan kurs US$1 ≈ ¥6.67; tugas ditagih dalam poin.
TurnstileTaskProxylessdanTurnstileTaskProxylessM1memiliki parameter yang sama tetapi jalur berbeda, sehingga bisa saling menjadi cadangan.TurnstileTaskmemuat captcha lewat proxy Anda sendiri, sehingga field proxy harus diisi.
Parameter permintaan
Section titled “Parameter permintaan”| Kolom | Tipe | Wajib | Deskripsi |
|---|---|---|---|
type | string | Ya | Jenis tugas; lihat "Jenis tugas dan harga" di halaman ini |
websiteURL | string | Ya | URL lengkap halaman yang menampilkan captcha. Isi dengan situs tempat Anda melihat captcha, bukan domain penyedia captcha |
websiteKey | string | Ya | Kunci situs (sitekey) Turnstile, biasanya diawali 0x |
pageAction | string | Tidak | action yang diteruskan halaman ke Turnstile (opsi turnstile.render, atau data-action pada elemen widget), misalnya login. Tidak diperlukan di sebagian besar kasus; tambahkan hanya jika tugas terus gagal |
data | string | Tidak | cData yang diteruskan halaman ke Turnstile (opsi turnstile.render, atau data-cdata pada elemen widget), misalnya c0bd4b36-7419-4e18-83c6-378699f2a9a2. Tidak diperlukan di sebagian besar kasus; tambahkan hanya jika tugas terus gagal |
proxyType | string | Beberapa jenis | Protokol proxy: http, https, socks4, atau socks5 (Wajib untuk TurnstileTask) |
proxyAddress | string | Beberapa jenis | Alamat IP atau hostname proxy. Alamat lokal atau privat seperti 127.0.0.1 atau 192.168.x.x tidak akan berfungsi karena server kami tidak dapat menjangkaunya (Wajib untuk TurnstileTask) |
proxyPort | integer | Beberapa jenis | Port proxy (Wajib untuk TurnstileTask) |
proxyLogin | string | Tidak | Nama pengguna proxy, jika proxy memerlukan autentikasi (hanya TurnstileTask) |
proxyPassword | string | Tidak | Kata sandi proxy, jika proxy memerlukan autentikasi (hanya TurnstileTask) |
userAgent | string | Tidak | User-Agent browser. Jika hasil berisi userAgent, gunakan nilai tersebut saat Anda mengirimkan token (hanya TurnstileTask) |
websiteKey biasanya diawali 0x. Cara menemukannya ada di Mencari parameter Turnstile.
Jika tugas tetap gagal: pageAction dan data
Section titled “Jika tugas tetap gagal: pageAction dan data”Pada umumnya cukup mengirim websiteURL dan websiteKey, kedua parameter ini tidak diperlukan. Jika Anda yakin websiteURL dan websiteKey sudah benar tetapi tugas tetap gagal, periksa apakah halaman mengirim action dan cData saat memanggil Turnstile (opsi turnstile.render, atau data-action dan data-cdata pada elemen kotak verifikasi). Jika ada, sertakan apa adanya:
pageAction: isi denganactiondari halaman, misalnyalogindata: isi dengancDatadari halaman, misalnyac0bd4b36-7419-4e18-83c6-378699f2a9a2
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "TurnstileTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA_SITE_KEY", "pageAction": "login", "data": "c0bd4b36-7419-4e18-83c6-378699f2a9a2" }}Contoh permintaan
Section titled “Contoh permintaan”{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "TurnstileTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA_SITE_KEY" }}curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "TurnstileTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA_SITE_KEY" }}'
# Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds:curl -s https://api.yescaptcha.com/getTaskResult \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}'import osimport time
import requests
API = "https://api.yescaptcha.com"CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] # Read the clientKey from an environment variable
def call(method, payload): r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30) data = r.json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data
def solve(task): task_id = call("createTask", {"task": task})["taskId"] for _ in range(36): # Poll every 5 seconds, for up to about 3 minutes time.sleep(5) result = call("getTaskResult", {"taskId": task_id}) if result.get("status") == "ready": return result["solution"] raise TimeoutError(task_id)
solution = solve({ "type": "TurnstileTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA_SITE_KEY",})print(solution["token"])const API = 'https://api.yescaptcha.com';const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable
async function call(method, payload) { const res = await fetch(`${API}/${method}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }), }); const data = await res.json(); if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`); return data;}
async function solve(task) { const { taskId } = await call('createTask', { task }); for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes await new Promise((r) => setTimeout(r, 5000)); const result = await call('getTaskResult', { taskId }); if (result.status === 'ready') return result.solution; } throw new Error(`timeout: ${taskId}`);}
const solution = await solve({ type: "TurnstileTaskProxyless", websiteURL: "https://example.com/login", websiteKey: "0x4AAAAAAA_SITE_KEY",});console.log(solution.token);Ganti websiteURL dan websiteKey dengan nilai dari situs target.
Hasil yang dikembalikan
Section titled “Hasil yang dikembalikan”{ "errorId": 0, "status": "ready", "solution": { "token": "0.ufq5RgSVZd11DPSX1brdrxnEs28KcVlKj2ORchqxSy2q9yAW6ciq3hriXDF4x...", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36" }}| Kolom | Tipe | Deskripsi |
|---|---|---|
token | string | Token yang harus dikirim ke situs target. Sekali pakai; kirim secepat mungkin |
userAgent | string | User-Agent yang digunakan untuk mendapatkan token. Gunakan nilai ini saat mengirim token, meskipun berbeda dari yang Anda kirim |
Isikan token ke field cf-turnstile-response di halaman (atau field yang diminta API situs target) lalu kirim. Gunakan userAgent yang dikembalikan sebagai User-Agent pada permintaan pengiriman.
Saat masih diproses, hasilnya adalah {"errorId": 0, "status": "processing"}; periksa lagi 5 detik kemudian. Jika terjadi error, tangani berdasarkan errorCode, lihat Kode error.
Pertanyaan umum
Section titled “Pertanyaan umum”Berapa lama token berlaku?
Section titled “Berapa lama token berlaku?”Hanya untuk sekali pakai. Sebaiknya segera dikirim setelah diterima (token Turnstile biasanya kedaluwarsa dalam beberapa menit, ditentukan oleh Cloudflare).
Setelah dikirim, situs tetap menolak?
Section titled “Setelah dikirim, situs tetap menolak?”Pastikan websiteURL adalah halaman tempat kotak verifikasi muncul, websiteKey benar, dan pengiriman memakai userAgent yang dikembalikan. Jika halaman mengirim action dan cData, sertakan sebagai pageAction dan data, lihat Jika tugas tetap gagal. Jika situs juga memeriksa IP, gunakan TurnstileTask dan kirim lewat proxy yang sama.