n8nからCAPTCHA解決APIを呼び出す
n8n の HTTP Request ノードでタスクを作成し、そのステータスで分岐します。まだ pending または solving の場合は、待機してから同じタスク ID を取得してください。別の POST を送信しないでください。
このページの内容
サイトと認証情報を設定する
- 1.
サイトプロファイルの有効化
solvethree コンソールで対象のホスト名を設定し、そのプロファイルがワークスペースで有効になっていることを確認してください。タスクでホスト名とアクションを送信しても、プロファイルは作成されません。
- 2.
n8n で Header Auth 認証情報を作成する
Authorizationヘッダーの値として、Bearerに続けてワークスペースの API キーを送信するように設定します。キーはタスクの JSON ではなく、認証情報に保存してください。
作成リクエストを設定する
HTTP Request ノードに Create task という名前を付けます。ポーリング用ノードはこの名前を参照して、元のタスク ID を取得します。
| フィールド | 設定 |
|---|---|
| 方法 | POST |
| URL | https://api.solvethree.com/v1/tasks |
| 認証 | 汎用認証情報タイプ |
| 汎用認証タイプ | Header Auth。作成した認証情報を選択 |
| クエリパラメーターを送信 | 有効にし、waitMs を値 15000 で追加 |
| ボディを送信 | 有効にし、JSON を選択して以下のボディを使用 |
{
"site": "accounts.example.com",
"action": "login",
"proxy": "http://user:[email protected]:8080",
"requestId": "example_login_001"
}site、action、proxy を、リクエストで使用するホスト名、アクション、プロキシに置き換えてください。proxy または proxyCandidates のどちらか一方だけを送信します。この例ではプロキシを 1 つ使用します。type や url は追加しないでください。デフォルトの reCAPTCHA タイプは Enterprise v3 です。
例の requestId を、新しい論理タスクごとに一意の値に置き換えてください。タイムアウト後にこのタスクを復旧する必要がある場合は、その値を変更しないでください。使用できるのは、1–64 文字の ASCII 英数字、アンダースコア、ハイフンです。
waitMs は JSON ボディではなく URL クエリに指定します。ネットワークのオーバーヘッドを考慮し、HTTP リクエストのタイムアウトは指定した 15 秒の待機時間より長く設定してください。30 秒は初期設定として妥当ですが、解答時間を保証するものではありません。Header Auth の認証情報で認証されるため、「ヘッダーを送信」で重複して指定する必要はありません。
HTTP の成功ではなくステータスで分岐する
タスクのペイロードを確認する前に、成功以外の HTTP レスポンスを処理してください。成功レスポンスの場合は IF ノードまたは Switch ノードを接続し、{{ $json.status }} を確認します。
| ステータス | 次の操作 |
|---|---|
| ready | ポーリングループを抜けて、解答を使用します。 |
| failed | ポーリングを停止します。診断用に errorCode と error を記録してください。 |
| pendingまたはsolving | ポーリングの期限を確認し、待機してから既存のタスクを GET で取得します。 |
ready 状態の reCAPTCHA タスクでは、返された userAgent と secChUa によるブラウザー識別情報、および成功したプロキシを使用して、返されたトークンを送信します。ready 状態のタスクは解答が生成されたことを意味し、その後のリクエストをウェブサイトが受け入れたことを示すものではありません。
解答に失敗した場合は返金されます。入力を変えずに再試行したり、ワークスペースの残高不足だと決めつけたりせず、報告されたエラーを診断してください。
待機してから元の ID を GET で取得する
- 1.
固定の期限を保存する
Create task の実行前に、ポーリングの期限をワークフローに保存します。たとえば、作成開始から 2 分後に設定します。これはワークフローの停止ポリシーであり、solvethree API の制限ではありません。後続のレスポンスで上書きされないように、期限は HTTP レスポンスの外に保持してください。
- 2.
ポーリングのたびに実行可否を確認する
pending または solving の場合は、IF ノードで現在時刻と保存した期限を比較します。期限を過ぎていれば、ループを終了してタスク ID を保持してください。期限内であれば、Wait ノードで 2 秒間待機し、GET の前にもう一度期限を確認します。
- 3.
既存のタスクを取得する
2 つ目の HTTP Request ノードを、以下の設定で構成します。そのレスポンスを同じステータス分岐に戻してください。ポーリングの分岐を Create task に戻してはいけません。
| フィールド | 設定 |
|---|---|
| 方法 | GET |
| URL | https://api.solvethree.com/v1/tasks/{{ $('Create task').item.json.id }} |
| 認証 | 汎用認証情報タイプ |
| 汎用認証タイプ | Header Auth。同じ認証情報を選択 |
| クエリパラメーターを送信 | 有効にし、waitMs を値 15000 で追加 |
| ボディを送信 | 無効 |
タスク ID の式は {{ $('Create task').item.json.id }} です。最新のアイテムにポーリングのレスポンスやほかのワークフローデータが含まれていても、指定した作成ノードから id を読み取ります。式内のノード名をワークフローと一致させてください。
GET では最大 15 秒の待機を指定できます。この HTTP リクエストにも、作成リクエストと同じタイムアウトの余裕を持たせてください。期限を過ぎると新たなポーリングは停止しますが、すでに実行中のリクエストは期限後に完了する場合があります。
n8n の外での同等の GET リクエストは次のとおりです。
curl --fail-with-body --max-time 30 \
"https://api.solvethree.com/v1/tasks/$TASK_ID?waitMs=15000" \
-H "Authorization: Bearer $SOLVETHREE_API_KEY"別のタスクを作成せずに、タイムアウトした POST を復旧する
接続タイムアウトが発生しても、作成に失敗したとは限りません。ID を受け取っていれば、そのタスクを取得してください。受け取っていなければ、同じタスク入力と同じ requestId で POST を再送信し、既存のタスクを復旧します。その ID を異なるタスク入力で再利用すると、競合が発生します。
同様に、ポーリングの期限に達したことはローカルな停止条件であり、タスクの失敗ステータスではありません。別の解答に料金を支払うのではなく、後の実行で取得できるように、元の ID を保持してください。
参照元とAPIリファレンス
最初のタスクを実行しましょう。
$5のワークスペースクレジットで始められます。