タスクタイプ
Cloudflare Turnstile
このページは中国語版から機械翻訳されたもので、不正確な箇所がある可能性があります。中国語版を正としてください。
Cloudflare Turnstile タスクはトークン(token)を返します。これを対象サイトに送信すると検証を通過できます。TurnstileTaskProxyless は 1 タスクあたり 25 ポイント(約 $3.75 / 1k) で、非同期で結果を返します。まず createTask を呼び、その後 5 秒ごとに getTaskResult を呼びます。認識に失敗した場合やタイムアウトした場合は、自動で返金されます。
https://api.yescaptcha.com/createTaskグローバルエンドポイントhttps://cn.yescaptcha.com/createTask中国エンドポイントリクエストボディは JSON で、clientKey で認証します。タスクを作成したエンドポイントと同じエンドポイントで結果を取得してください。
ページのフォームに Cloudflare の検証ウィジェット(「人間であることを確認します」)が埋め込まれており、ページが challenges.cloudflare.com/turnstile のスクリプトを読み込んでいる場合です。
ページ全体が Cloudflare に遮られ、「しばらくお待ちください…」「ブラウザを確認しています」と表示される場合は、Turnstile ではなく Cloudflare チャレンジページです。Cloudflare チャレンジページを使用してください。違いはキャプチャの種類の見分け方を参照してください。
タスクタイプと料金
Section titled “タスクタイプと料金”| タスクタイプ | 価格 | 返却方式 | 備考 |
|---|---|---|---|
TurnstileTaskProxyless | $3.75 / 1k; 25 ポイント/タスク · ¥25 / 1k | 非同期 | |
TurnstileTaskProxylessM1 | $4.50 / 1k; 30 ポイント/タスク · ¥30 / 1k | 非同期 | |
TurnstileTask | $3.75 / 1k; 25 ポイント/タスク · ¥25 / 1k | 非同期 | プロキシ持ち込み |
米ドル価格は US$1 ≈ ¥6.67 での概算です。タスクはポイントで課金されます。
TurnstileTaskProxylessとTurnstileTaskProxylessM1はパラメーターが同じで、経路が異なります。お互いにバックアップとして使えます。TurnstileTaskは独自のプロキシでキャプチャを読み込みます。プロキシ関連のフィールドを渡す必要があります。
リクエストパラメーター
Section titled “リクエストパラメーター”| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | string | はい | タスクタイプ。値はこのページの「タイプと料金」を参照してください |
websiteURL | string | はい | キャプチャが表示されるページの完全な URL。キャプチャが表示されるサイトを指定し、キャプチャ提供元のドメインは指定しないでください |
websiteKey | string | はい | Turnstile のサイトキー(sitekey)。通常は 0x で始まります |
pageAction | string | いいえ | ページが Turnstile に渡す action(turnstile.render のオプション、またはウィジェット要素の data-action)。例:login。ほとんどの場合は不要です。タスクが失敗し続ける場合にのみ追加してください |
data | string | いいえ | ページが Turnstile に渡す cData(turnstile.render のオプション、またはウィジェット要素の data-cdata)。例:c0bd4b36-7419-4e18-83c6-378699f2a9a2。ほとんどの場合は不要です。タスクが失敗し続ける場合にのみ追加してください |
proxyType | string | 一部のタイプ | プロキシのプロトコル: http、https、socks4、socks5(TurnstileTask では必須) |
proxyAddress | string | 一部のタイプ | プロキシの IP アドレスまたはホスト名。127.0.0.1 や 192.168.x.x のようなローカルアドレスやプライベートアドレスは、当社のサーバーから到達できないため使用できません(TurnstileTask では必須) |
proxyPort | integer | 一部のタイプ | プロキシのポート(TurnstileTask では必須) |
proxyLogin | string | いいえ | プロキシのユーザー名(プロキシが認証を必要とする場合)(TurnstileTask のみ) |
proxyPassword | string | いいえ | プロキシのパスワード(プロキシが認証を必要とする場合)(TurnstileTask のみ) |
userAgent | string | いいえ | ブラウザーの User-Agent。結果に userAgent が含まれている場合は、token を送信するときにその値を使用してください(TurnstileTask のみ) |
websiteKey は通常 0x で始まります。見つけ方は Turnstile パラメーターの見つけ方を参照してください。
どうしても通らない場合:pageAction と data
Section titled “どうしても通らない場合:pageAction と data”ほとんどの場合、websiteURL と websiteKey だけで十分で、この 2 つのパラメーターは不要です。websiteURL と websiteKey が正しいことを確認してもタスクが通らない場合は、ページが Turnstile を呼び出すときに action と cData を渡しているかを確認してください(turnstile.render のパラメーター、または検証ウィジェット要素の data-action、data-cdata)。渡している場合は、そのまま指定します。
pageAction:ページのactionを指定します(例:login)data:ページのcDataを指定します(例:c0bd4b36-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" }}リクエスト例
Section titled “リクエスト例”{ "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);websiteURL と websiteKey は、対象サイトの値に置き換えてください。
{ "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" }}| フィールド | 型 | 説明 |
|---|---|---|
token | string | 対象サイトに送信するトークン。1 回限りの使用です。できるだけ早く送信してください |
userAgent | string | トークンの取得に使用した User-Agent。トークンを送信する際はこの値を使用してください。送信した値と異なる場合もこちらが優先されます |
token をページの cf-turnstile-response フィールド(または対象サイトの API が要求するフィールド)に設定して送信します。送信リクエストの User-Agent には、返却された userAgent を使用してください。
処理中の場合は {"errorId": 0, "status": "processing"} が返るので、5 秒後に再度取得してください。エラーが発生した場合は errorCode に応じて対処してください。エラーコードを参照してください。
よくある質問
Section titled “よくある質問”token の有効期間はどれくらいですか?
Section titled “token の有効期間はどれくらいですか?”1 回限り有効です。取得後はできるだけ早く送信してください(Turnstile の token は通常数分以内に失効します。失効時間は Cloudflare が決定します)。
送信してもサイトで通過しません
Section titled “送信してもサイトで通過しません”websiteURL が検証ウィジェットの表示されるページであること、websiteKey が正しいことを確認し、送信時には返却された userAgent を使用してください。ページが action や cData を渡している場合は、pageAction と data として指定してください。上記のどうしても通らない場合を参照してください。サイトが IP も検査している場合は、TurnstileTask を使用し、送信時にも同じプロキシを経由してください。