AwsWafCaptcha: AWS WAFの解決
TIP
タスクは createTask メソッドで作成し、結果は getTaskResult メソッドで取得します。
サポートされているタスクタイプtypes
:
AntiAwsWafTask
このタスクタイプは独自のプロキシが必要です。AntiAwsWafTaskProxyLess
このタスクタイプは独自のプロキシを必要としません。
タスクの作成
createTask メソッドで認識タスクを作成します。
タスクオブジェクトの構造
プロパティ | 型 | 必須 | 説明 |
---|---|---|---|
type | String | 必須 | AntiAwsWafTask AntiAwsWafTaskProxyLess |
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 | websiteURL awsKey awsIv awsContext awsChallengeJS | 状況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 | websiteURL awsChallengeJS | ページでkey、iv、contextが見つからないがchallenge.jsがある場合、challenge.jsをawsChallengeJSの値としてcapsolverに渡します。 |
状況 3-2 | websiteURL awsApiJs | 状況3-1に基づき、challenge.jsがどこから来ているのか不明な場合でも、ページにjsapi.jsがある場合、challenge.jsはjsapi.jsのコードから組み立てられていることを意味するため、jsapi.jsを直接awsApiJsの値としてcapsolverに渡すことができます。 |
状況 4 | websiteURL awsProblemUrl | 特殊なケースとして、ページに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 | websiteURL awsApiKey awsApiJs awsExistingToken | これは通常、二次認証が必要な状況で発生します。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)