ガイド
タスク(トークン)
AWS WAF

AwsWafCaptcha: AWS WAFの解決

TIP

タスクは createTask メソッドで作成し、結果は getTaskResult メソッドで取得します。

サポートされているタスクタイプtypes:

  • AntiAwsWafTask このタスクタイプは独自のプロキシが必要です。
  • AntiAwsWafTaskProxyLess このタスクタイプは独自のプロキシを必要としません。

タスクの作成

createTask メソッドで認識タスクを作成します。

タスクオブジェクトの構造

プロパティ必須説明
typeString必須AntiAwsWafTask
AntiAwsWafTaskProxyLess
proxyStringオプションプロキシの使用方法 を参照してください
websiteURLString必須キャプチャ関連情報を返すページのURL
awsKeyStringオプションキャプチャページから返される key の値
awsIvStringオプションキャプチャページから返される iv の値
awsContextStringオプションキャプチャページから返される context の値
awsChallengeJSStringオプションキャプチャページから返される challenge.js へのリンク
awsApiJsStringオプションキャプチャページから返される jsapi.js へのリンク
awsProblemUrlStringオプションproblemnum_solutions_required などのキーワードを含む problem エンドポイントURL
awsApiKeyStringオプションproblem エンドポイントの api_key の値
awsExistingTokenStringオプション前回の検証で使用された aws-waf-token
どのパラメータを使用すればよいですか?

どのパラメータをcapsolverに渡すべきか不明な場合は、以下の異なるパラメータの組み合わせのシナリオを参照してください。お客様の状況がカバーされていない場合は、カスタマーサービスにご連絡ください。

状況渡すパラメータ前提条件
状況 1websiteURLAWSキャプチャページのレスポンスコードが405の場合があり、HTMLで以下のパラメータが見つかります:
window.gokuProps = {"key":"AQID...","iv":"A6we...","context":"rGXm.."}
状況 2websiteURL
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-1websiteURL
awsChallengeJS
ページでkey、iv、contextが見つからないがchallenge.jsがある場合、challenge.jsをawsChallengeJSの値としてcapsolverに渡します。
状況 3-2websiteURL
awsApiJs
状況3-1に基づき、challenge.jsがどこから来ているのか不明な場合でも、ページにjsapi.jsがある場合、challenge.jsはjsapi.jsのコードから組み立てられていることを意味するため、jsapi.jsを直接awsApiJsの値としてcapsolverに渡すことができます。
状況 4websiteURL
awsProblemUrl
特殊なケースとして、ページにkey、iv、context、challenge.jsが見つからず、captcha.jsのみがある場合、problemエンドポイントのURLをcapsolverに渡す必要があります。awsProblemUrlにはproblemnum_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
状況 5websiteURL
awsApiKey
awsApiJs
awsExistingToken
これは通常、二次認証が必要な状況で発生します。problemエンドポイントにはawsApiKeyとしてapi_key(その値は通常、各ウェブサイトで一定です)が含まれています。ページにはawsApiJsとしてjsapi.jsがあり、前回の検証からのaws-waf-tokenawsExistingTokenとして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)