cURLでreCAPTCHA Enterpriseトークンをリクエストする

著者:solvethree読了時間:1分

サイトのホスト名、アクション、プロキシを指定してタスクを作成します。pendingまたはsolvingが返された場合は、返されたタスクIDでポーリングしてください。ステータスがreadyになった場合にのみ、solution.tokenからトークンを読み取ってください。

このページの内容

サイト、キー、プロキシの準備

  • シェルでcURLとjqを使用できるようにしてください。
  • SOLVETHREE_API_KEYにワークスペースのAPIキーを設定してください。これらのコマンドはサーバー側で実行し、キーをブラウザーコードに含めないでください。
  • SOLVETHREE_PROXYに、解決処理とトークン送信に使用するプロキシURLを設定してください。
  • コンソールで、ワークスペース用の有効なreCAPTCHAサイトプロファイルを設定してください。例のaccounts.example.comとloginを、それぞれご利用のホスト名とアクションに置き換えてください。

ホスト名とアクションを送信しても、サイトプロファイルは作成されません。解決処理をリクエストする前に、プロファイルを有効にしておく必要があります。

待機時間を明示してタスクを作成する

cURL + jq · タスクを1件作成
# Set SOLVETHREE_API_KEY and SOLVETHREE_PROXY in your environment first.
# Replace the hostname and action with your active site profile.
jq -n \
  --arg proxy "$SOLVETHREE_PROXY" \
  --arg requestId "login-$(date +%s)-$$" \
  '{site:"accounts.example.com", action:"login", proxy:$proxy, requestId:$requestId}' \
| curl --fail-with-body --max-time 30 \
  'https://api.solvethree.com/v1/tasks?waitMs=15000' \
  -H "Authorization: Bearer $SOLVETHREE_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-binary @-

JSONボディでは、site、action、単一のproxyを指定します。proxyまたはproxyCandidatesのいずれか一方だけが必要です。typeやurlは追加しないでください。recaptchaTypeを省略すると、enterprise-v3が選択されます。

waitMs=15000クエリパラメーターは、作成リクエストに最大15秒の待機を指示します。JSONボディではなくURLに指定してください。cURLのタイムアウトは30秒で、サーバー側の待機時間に加え、ネットワークのオーバーヘッドを見込んだ余裕を確保しています。レスポンスが届いた時点でも、タスクがまだ終了状態に達していない場合があります。

レスポンスの確認と未完了タスクのポーリング

ボディをタスクのレスポンスとして解釈する前に、HTTPエラーがないか確認してください。どちらのコマンドも--fail-with-bodyを使用しています。HTTPリクエストの失敗と、ステータスがfailedのタスクは、別々に処理してください。

準備完了のレスポンスは次の形式です。以下の値はプレースホルダーであり、送信可能なトークンではありません。

準備完了レスポンスの例 · プレースホルダーの認証情報
{
  "id": "example-task",
  "status": "ready",
  "solution": {
    "token": "EXAMPLE_TOKEN",
    "userAgent": "EXAMPLE_USER_AGENT",
    "secChUa": "EXAMPLE_CLIENT_HINTS"
  }
}
返されたタスクステータスに応じた処理
返されたタスクステータスに応じた処理
ステータス次の操作
pendingまたはsolving返されたidを保持し、同じタスクを取得してください。まだ使用可能な解決結果はありません。代わりのタスクを作成しないでください。
readyポーリングを停止し、solution.token、solution.userAgent、solution.secChUaを読み取ってください。
failedポーリングを停止し、errorCodeとerrorを確認してください。失敗した解決処理の料金は返金されます。別のタスクを開始する前に、原因を解消してください。

終了状態に達していないレスポンスの場合は、環境変数TASK_IDに返されたidを設定し、そのタスクを取得します。

Task API · 既存のタスクを取得
curl --fail-with-body --max-time 30 \
  "https://api.solvethree.com/v1/tasks/$TASK_ID?waitMs=15000" \
  -H "Authorization: Bearer $SOLVETHREE_API_KEY"

このGETは、結果を最大15秒待機し、HTTPタイムアウトは30秒です。waitMsを指定しない場合、GETは待機せずに返ります。ステータスがpendingまたはsolvingの間だけGETを繰り返してください。また、ポーリングループが無期限に実行されないよう、呼び出し側で全体の期限を設定してください。

タスクが失敗した場合は、残高の問題だと決めつけず、エラーの詳細を基に対処してください。たとえば、site-unreachableの場合は、入力を変更せずにやみくもに再送するのではなく、対象への到達性を確認する必要があります。

トークンを送信

対象アプリケーションのリクエストには solution.token を使用してください。タスクの id はタスクの取得専用で、CAPTCHA トークンではありません。トークンを指定する場所は対象のフォームや API によって異なるため、対象への送信に共通して使えるコマンドはありません。

トークンを送信するときは、返された solution.userAgent と solution.secChUa を、解決に成功したプロキシとともに使用してください。上記の単一プロキシの例では、同じ SOLVETHREE_PROXY を使用します。無関係なブラウザー識別情報や対象 URL を混在させないでください。

ready は、solvethree が解決結果を生成したことを意味します。リクエストが受け入れられたかどうかは、対象アプリケーションのレスポンスを別途確認してください。

その他の質問

これは Google の siteverify API と同じものですか?

いいえ。Google の siteverify は既存のトークンを検証するもので、ウェブサイト所有者の検証用シークレットが必要です。solvethree API は、ワークスペースの API キーを使用して解決結果を生成します。タスクリクエストに Google の検証用シークレットを含めないでください。

最初のタスクを実行しましょう。

$5のワークスペースクレジットで始められます。

ワークスペースを作成
cURLでreCAPTCHA Enterpriseトークンをリクエストする · solvethree