タスクタイプ
reCAPTCHA v2
このページは中国語版から機械翻訳されたもので、不正確な箇所がある可能性があります。中国語版を正としてください。
reCAPTCHA v2 のタスクは token(gRecaptchaResponse)を返します。この token を対象サイトに送信すれば認証を通過でき、画像をクリックする必要はありません。最もよく使う NoCaptchaTaskProxyless は 1 タスクあたり 15 ポイント(約 $2.25 / 1k) で、非同期で結果を返します。まず createTask でタスクを作成し、その後 5 秒ごとに getTaskResult を呼び出して結果を取得します。認識に失敗したタスクやタイムアウトしたタスクは自動的に返金されます。
https://api.yescaptcha.com/createTaskグローバルエンドポイントhttps://cn.yescaptcha.com/createTask中国エンドポイントリクエストボディは JSON で、clientKey(ダッシュボードの yescaptcha.com からコピーできます)で認証します。タスクを作成したエンドポイントと同じエンドポイントで結果を取得してください。
- ページに「ロボットではありません」(I’m not a robot)のチェックボックスがある場合: 通常版。
- チェックボックスがなく、送信ボタンをクリックしたあとに画像の問題が表示される場合: 非表示版。
"isInvisible": trueを追加します。 - ページが
recaptcha/enterprise.jsを読み込んでいる、またはリクエスト URL にenterpriseが含まれている場合: Enterprise 版。名前にEnterpriseが付くタイプを使います。
どの種類か分からない場合は、キャプチャの種類を判別するを参照してください。token 方式の通過率が思わしくない場合は、reCAPTCHA v2 画像認識に切り替えられます。API がクリックすべき画像を返すので、ブラウザ上で自分でクリックします。
タイプと料金
Section titled “タイプと料金”| タスクタイプ | 価格 | 返却方式 | 備考 |
|---|---|---|---|
NoCaptchaTaskProxyless | $2.25 / 1k; 15 ポイント/タスク · ¥15 / 1k | 非同期 | |
RecaptchaV2TaskProxyless | $3.00 / 1k; 20 ポイント/タスク · ¥20 / 1k | 非同期 | NoCaptchaTaskProxyless とパラメータは同じで、経路が異なります。どちらか一方をバックアップとして使えます |
NoCaptchaTask | $2.25 / 1k; 15 ポイント/タスク · ¥15 / 1k | 非同期 | プロキシ持ち込み |
RecaptchaV2EnterpriseTaskProxyless | $3.00 / 1k; 20 ポイント/タスク · ¥20 / 1k | 非同期 | |
RecaptchaV2EnterpriseTask | $3.00 / 1k; 20 ポイント/タスク · ¥20 / 1k | 非同期 | プロキシ持ち込み |
米ドル価格は US$1 ≈ ¥6.67 での概算です。タスクはポイントで課金されます。
NoCaptchaTaskProxylessとRecaptchaV2TaskProxylessはパラメータが同じで、経路が異なります。一方の通過率が思わしくない場合は、もう一方を試してください。- 名前に
Proxylessが付かないタイプ(NoCaptchaTask、RecaptchaV2EnterpriseTask)は、お客様自身のプロキシでキャプチャを読み込みます。proxyType、proxyAddress、proxyPortなどのフィールドを渡す必要があります。対象サイトがアクセス元 IP を制限している場合に使います。
リクエストパラメータ
Section titled “リクエストパラメータ”createTask の task オブジェクト:
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | string | はい | タスクタイプ。値はこのページの「タイプと料金」を参照してください |
websiteURL | string | はい | キャプチャが表示されるページの完全な URL。キャプチャが表示されるサイトを指定し、キャプチャ提供元のドメインは指定しないでください |
websiteKey | string | はい | サイトキー(sitekey)。ページのソースまたはネットワークリクエストから確認できます。通常は変わりません |
isInvisible | boolean | いいえ | インビジブル版の場合は true を指定します。通常版では指定しません |
proxyType | string | 一部のタイプ | プロキシのプロトコル: http、https、socks4、socks5(NoCaptchaTask、RecaptchaV2EnterpriseTask では必須) |
proxyAddress | string | 一部のタイプ | プロキシの IP アドレスまたはホスト名。127.0.0.1 や 192.168.x.x のようなローカルアドレスやプライベートアドレスは、当社のサーバーから到達できないため使用できません(NoCaptchaTask、RecaptchaV2EnterpriseTask では必須) |
proxyPort | integer | 一部のタイプ | プロキシのポート(NoCaptchaTask、RecaptchaV2EnterpriseTask では必須) |
proxyLogin | string | いいえ | プロキシのユーザー名(プロキシが認証を必要とする場合)(NoCaptchaTask、RecaptchaV2EnterpriseTask のみ) |
proxyPassword | string | いいえ | プロキシのパスワード(プロキシが認証を必要とする場合)(NoCaptchaTask、RecaptchaV2EnterpriseTask のみ) |
userAgent | string | いいえ | ブラウザーの User-Agent。結果に userAgent が含まれている場合は、token を送信するときにその値を使用してください(NoCaptchaTask、RecaptchaV2EnterpriseTask のみ) |
enterprisePayload | object | いいえ | エンタープライズ版の追加パラメータ。例: reCAPTCHA Enterprise の s の値 {"s": "..."}。ページで使われていない場合は指定しません(RecaptchaV2EnterpriseTaskProxyless、RecaptchaV2EnterpriseTask のみ) |
websiteURL と websiteKey の調べ方は、reCAPTCHA のパラメータを調べるを参照してください。
リクエスト例
Section titled “リクエスト例”Google 公式のデモページを例にします:
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" }}タスクの作成、5 秒ごとの結果取得、token の出力までを含む完全なコードです。実行前に clientKey を環境変数 YESCAPTCHA_CLIENT_KEY に設定してください:
curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" }}'
# 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": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",})print(solution["gRecaptchaResponse"])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: "NoCaptchaTaskProxyless", websiteURL: "https://www.google.com/recaptcha/api2/demo", websiteKey: "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",});console.log(solution.gRecaptchaResponse);Enterprise 版で、ページが reCAPTCHA に s 値を渡している場合は、enterprisePayload に指定します:
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "RecaptchaV2EnterpriseTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "SITE_KEY_OF_THE_PAGE", "enterprisePayload": { "s": "S_VALUE_FROM_THE_PAGE" } }}自分のプロキシを使う場合:
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTask", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "proxyType": "http", "proxyAddress": "proxy.example.com", "proxyPort": 8080, "proxyLogin": "user", "proxyPassword": "pass" }}createTask はタスク ID を返します:
{ "errorId": 0, "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"}このタスク ID で getTaskResult を呼び出します。処理中は {"errorId": 0, "status": "processing"} が返るので、5 秒後に再度取得してください。完了すると次のように返ります:
{ "errorId": 0, "status": "ready", "solution": { "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..." }}| フィールド | 型 | 説明 |
|---|---|---|
gRecaptchaResponse | string | 対象サイトに送信するトークン。1 回限りの使用で、有効期間は約 120 秒です。60 秒以内に使用してください |
タスクの処理時間は最長で約 110 秒です。タイムアウトすると ERROR_TASK_TIMEOUT が返り、ポイントが返金されます。エラー時は errorId が 1 になるので、errorCode に応じて処理してください。詳しくはエラーコードを参照してください。token を取得したあとの送信方法は、token で reCAPTCHA を完了するを参照してください。
よくある質問
Section titled “よくある質問”同じサイトなのに、token が通ったり通らなかったりするのはなぜですか?
Section titled “同じサイトなのに、token が通ったり通らなかったりするのはなぜですか?”通過できるかどうかは対象サイトが判定します。サイトは認証ごとにスコアを付けて基準値を設けており、この基準値はいつでも変更される可能性があります。そのため通過率はサイトによって異なり、すべての token が通るわけではありません。同種の別のタスクタイプで通過率を比較するか、画像認識に切り替えてください。
token はどのくらいの間有効ですか?
Section titled “token はどのくらいの間有効ですか?”1 回限り使用でき、有効期間は約 120 秒です。取得後 60 秒以内の送信をおすすめします。有効期間は Google が決めています。
認識に失敗した場合も課金されますか?
Section titled “認識に失敗した場合も課金されますか?”課金されません。ERROR_CAPTCHA_UNSOLVABLE を返したタスクやタイムアウトしたタスクは自動的に返金されます。詳しくは課金と返金を参照してください。