返されたユーザーエージェントとクライアントヒントを使う
解決結果を対象サイトに送信するリクエストには、返されたブラウザー識別情報を使用してください。解決結果から両方のヘッダーを設定し、解決処理に成功したプロキシ経由でそのリクエストを送信してください。
このページの内容
既存のブラウザーヘッダーを置き換える
| HTTPヘッダー | 準備完了の解決結果の値 |
|---|---|
| User-Agent | solution.userAgent |
| sec-ch-ua | solution.secChUa |
スクレイパーの任意のユーザーエージェントや、既存のHTTPセッションのユーザーエージェントをそのまま使わないでください。解決結果とともに返されたブラウザー識別情報を、無関係な情報に置き換えることになります。sec-ch-uaだけを更新すると、2つのヘッダーが異なるブラウザーを示す状態になります。
重複するヘッダーを追加するのではなく、古い値を置き換えてください。送信前に値を上書きする可能性がある、セッションのデフォルト設定やリクエスト構築用ミドルウェアを確認してください。
処理に成功したプロキシを使う
readyの結果を使用してください。pendingとsolvingには使用可能な解決結果が含まれていません。SDKのsolveメソッドは、準備完了の結果を待つか、エラーを送出します。
単一のproxyを指定して送信したタスクでは、対象へのリクエストにもそのプロキシを再利用してください。proxyCandidatesを指定した場合は、Pythonのsuccessful_proxy(original_task, ready_result)またはJavaScriptのsuccessfulProxy(originalTask, readyResult)で成功したプロキシを選択してください。単に最初の候補を使わないでください。
以下のサンプルでは、送信用のプロキシをrequestのproxyフィールドから読み取ります。候補を指定したタスクでは、リクエストの送信前にヘルパーが選択した値をそのフィールドに設定してください。設定方法はプロキシ候補の選択を参照してください。
PythonまたはNode.jsで対象へのリクエストを送信する
これらのサンプルはreCAPTCHA v3 Enterpriseのトークンを送信します。Pythonでは、solutionは準備完了の結果に含まれる解決結果の辞書です。Node.jsでは、resultは準備完了のタスクです。どちらのサンプルも、返されたヘッダーを明示的に設定し、選択したプロキシ経由でリクエストを送信します。
# Continue after client.solve(). Install requests separately: pip install requests.
import requests
# This example endpoint accepts the standard reCAPTCHA form field.
# Use your application's real URL, form fields, CSRF token and session.
response = requests.post(
"https://accounts.example.com/login",
data={"g-recaptcha-response": solution["token"]},
headers={
"User-Agent": solution["userAgent"],
"sec-ch-ua": solution["secChUa"],
},
proxies={"http": request["proxy"], "https": request["proxy"]},
timeout=30,
allow_redirects=False,
)
# Inspect the application's response to determine whether it accepted the request.
print("Application HTTP status:", response.status_code)// Continue after client.solve(). Install undici separately: npm install undici@7.
import { fetch, ProxyAgent } from 'undici';
const dispatcher = new ProxyAgent(request.proxy);
try {
// Replace the URL and form fields with your application's contract.
const response = await fetch('https://accounts.example.com/login', {
method: 'POST',
dispatcher,
redirect: 'manual',
headers: {
'user-agent': result.solution.userAgent,
'sec-ch-ua': result.solution.secChUa,
},
body: new URLSearchParams({
'g-recaptcha-response': result.solution.token,
}),
signal: AbortSignal.timeout(30_000),
});
console.log('Application HTTP status:', response.status);
await response.arrayBuffer();
} finally {
await dispatcher.close();
}サンプルのログインURLを意図した対象URLに置き換え、そのアプリケーションの実際のフォームフィールド、CSRFトークン、セッションを使用してください。サンプルは、アプリケーションがg-recaptcha-responseでトークンを受け取ることを前提としています。返されたブラウザーヘッダーは、フォーム本文ではなくHTTPヘッダーに設定してください。
対象サイトがリクエストを拒否した場合は、HTTPクライアントから実際に送信されたトークン値、両方のブラウザーヘッダー、プロキシ、送信先URLを確認してください。タスクがreadyであることは、解決結果が生成されたことを意味し、対象サイトが送信内容を受け入れたことを意味しません。出力されたアプリケーションのHTTPステータスは調査の出発点です。実際の成功または失敗は、アプリケーションのレスポンスで確認してください。
参照元とAPIリファレンス
最初のタスクを実行しましょう。
$5のワークスペースクレジットで始められます。