AwsWafCaptcha: AWS WAFの解決
TIP
タスクは createTask メソッドで作成し、結果は getTaskResult メソッドで取得します。
サポートされているタスクタイプtypes:
AntiAwsWafTaskこのタスクタイプは独自のプロキシが必要です。AntiAwsWafTaskProxyLessこのタスクタイプは独自のプロキシを必要としません。
タスクの作成
createTask メソッドで認識タスクを作成します。
タスクオブジェクトの構造
| プロパティ | 型 | 必須 | 説明 |
|---|---|---|---|
| type | String | 必須 | AntiAwsWafTaskAntiAwsWafTaskProxyLess |
| proxy | String | オプション | プロキシの使用方法 を参照してください |
| websiteURL | String | 必須 | キャプチャ関連情報を返すページのURL |
| awsKey | String | オプション | キャプチャページから返される key の値 |
| awsIv | String | オプション | キャプチャページから返される iv の値 |
| awsContext | String | オプション | キャプチャページから返される context の値 |
| awsChallengeJS | String | オプション | キャプチャページから返される challenge.js へのリンク |
| awsApiJs | String | オプション | キャプチャページから返される jsapi.js へのリンク |
| awsProblemUrl | String | オプション | problem、num_solutions_required などのキーワードを含む problem エンドポイントURL |
| awsApiKey | String | オプション | problem エンドポイントの api_key の値 |
| awsExistingToken | String | オプション | 前回の検証で使用された aws-waf-token |
どのパラメータを使用すればよいですか?
どのパラメータをcapsolverに渡すべきか不明な場合は、以下の異なるパラメータの組み合わせのシナリオを参照してください。お客様の状況がカバーされていない場合は、カスタマーサービスにご連絡ください。
| 状況 | 渡すパラメータ | 前提条件 |
|---|---|---|
| 状況 1 | websiteURL | AWSキャプチャページのレスポンスコードが405の場合があり、HTMLで以下のパラメータが見つかります:window.gokuProps = {"key":"AQID...","iv":"A6we...","context":"rGXm.."} |
| 状況 2 | websiteURLawsKeyawsIvawsContextawsChallengeJS | 状況1の前提条件の下で、capsolverがエラーメッセージ:Captcha render unexpect status code XXX, please pass in the awsKey, awsIv, awsContext and awsChallengeJs parameters を返した場合、サーバーがキャプチャをトリガーしなかったことを示します。手動でkey、iv、contextパラメータを解析し、capsolverに渡してください。特別な注意 timeout metering, your parameters have expired, please update awsKey, awsIv, awsContext or awsChallengeJS. というエラーメッセージが表示された場合、提供された4つのパラメータが互いに対応していないか、有効期限が切れていることを示しています。各リクエストに対してすべてのパラメータをリアルタイムで解析することをお勧めします。 |
| 状況 3-1 | websiteURLawsChallengeJS | ページでkey、iv、contextが見つからないがchallenge.jsがある場合、challenge.jsをawsChallengeJSの値としてcapsolverに渡します。 |
| 状況 3-2 | websiteURLawsApiJs | 状況3-1に基づき、challenge.jsがどこから来ているのか不明な場合でも、ページにjsapi.jsがある場合、challenge.jsはjsapi.jsのコードから組み立てられていることを意味するため、jsapi.jsを直接awsApiJsの値としてcapsolverに渡すことができます。 |
| 状況 4 | websiteURLawsProblemUrl | 特殊なケースとして、ページにkey、iv、context、challenge.jsが見つからず、captcha.jsのみがある場合、problemエンドポイントのURLをcapsolverに渡す必要があります。awsProblemUrlにはproblemやnum_solutions_requiredなどの値が含まれている必要があります。これらの値は、ページHTMLでvisualSolutionsRequiredを検索することで見つけることができます。awsProblemUrlの完全な例: https://ait.2608283a.us-east-1.captcha.awswaf.com/ait/ait/ait/problem?kind=visual&domain=www.amazon.com&locale=en-us&problem=gridcaptcha-5-0.15-0&num_solutions_required=2 |
| 状況 5 | websiteURLawsApiKeyawsApiJsawsExistingToken | これは通常、二次認証が必要な状況で発生します。problemエンドポイントにはawsApiKeyとしてapi_key(その値は通常、各ウェブサイトで一定です)が含まれています。ページにはawsApiJsとしてjsapi.jsがあり、前回の検証からのaws-waf-tokenがawsExistingTokenとしてcapsolverに渡されます。 |
リクエスト例
POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AntiAwsWafTask", // AntiAwsWafTaskProxyLess
"websiteURL": "https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest", // Required
"awsKey": "AQIDAHjcYu/GjX+QlghicBg......shMIKvZswZemrVVqA==", // Optional
"awsIv": "CgAAFDIlckAAAAid", // Optional
"awsContext": "7DhQfG5CmoY90ZdxdHCi8WtJ3z......njNKULdcUUVEtxTk=", // Optional
"awsChallengeJS": "https://41bcdd4fb3cb.610cd090.us-east-1.token.awswaf.com/41bcdd4fb......a6c832/challenge.js", // Optional
"awsApiJs": "https://9175c2fd4189.edge.captcha-sdk.awswaf.com/9175c2fd4189/jsapi.js", // Optional
"awsProblemUrl": "https://ait...awswaf.com/ait/ait/ait/problem?kind=visual&...&problem=gridcaptcha-5-0.1-0&num_solutions_required=2", // Optional
"awsApiKey": "Sps+L2gV...", // Optional
"awsExistingToken": "5na16dg6-216a-...", // Optional
"proxy": "http:ip:port:user:pass" // socks5:ip:port:user:pass
}
}タスクを送信した後、成功した場合はレスポンスで「taskId」を受け取るはずです。タスクIDを受け取らなかった場合は、 errorCode: 全エラーリスト をお読みください。 詳細については、ブログ記事 How to solve aws amazon captcha token も参照してください。
レスポンス例
{
"errorId": 0,
"errorCode": "",
"errorDescription": "",
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}結果の取得
taskIdを取得したら、解決策を取得するためにtaskIdを送信する必要があります。レスポンスの構造は getTaskResult で説明されています。
システムの負荷状況に応じて、5秒から30秒の間に結果が得られます。
リクエスト例
POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}レスポンス例
{
"errorId": 0,
"taskId": "646825ef-9547-4a29-9a05-50a6265f9d8a",
"status": "ready",
"solution": {
"cookie": "223d1f60-0e9f-4238-ac0a-e766b15a778e:EQoAf0APpGIKAAAA:AJam3OWpff1VgKIJxH4lGMMHxPVQ0q0R3CNtgcMbR4VvnIBSpgt1Otbax4kuqrgkEp0nFKanO5oPtwt9+Butf7lt0JNe4rZQwZ5IrEnkXvyeZQPaCFshHOISAFLTX7AWHldEXFlZEg7DjIc="
}
}SDKリクエストの使用
# pip install --upgrade capsolver
# export CAPSOLVER_API_KEY='...'
import capsolver
# capsolver.api_key = "..."
solution = capsolver.solve({
"type": "AntiAwsWafTask",
"websiteURL": "https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest",
"proxy": "ip:port:user:pass"
})サンプルコード
# pip install requests
import requests
import time
api_key = "YOUR_API_KEY" # TODO: capsolverのAPIキー
site_url = "https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest" # TODO: あなたのサイトのページURL
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'AntiAwsWafTaskProxyLess',
"websiteURL": site_url
}
}
res = requests.post("https://api.capsolver.com/createTask", json=payload)
resp = res.json()
task_id = resp.get("taskId")
if not task_id:
print("Failed to create task:", res.text)
return
print(f"Got taskId: {task_id} / Getting result...")
while True:
time.sleep(1) # delay
payload = {"clientKey": api_key, "taskId": task_id}
res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
resp = res.json()
status = resp.get("status")
if status == "ready":
return resp.get("solution", {}).get('cookie')
if status == "failed" or resp.get("errorId"):
print("Solve failed! response:", res.text)
return
token = capsolver()
print(token)