指南
任务(令牌)
AWS WAF

AwsWafCaptcha: 解决 AWS WAF

TIP

通过 createTask 创建任务, 然后通过 getTaskResult 获取识别结果

任务类型type如下:

  • AntiAwsWafTask 需要转入您自己的代理
  • AntiAwsWafTaskProxyLess 无需代理或已内置代理

创建任务

通过 createTask 创建任务

参数结构

PropertiesTypeRequiredDescription
typeStringRequiredAntiAwsWafTask
AntiAwsWafTaskProxyLess
proxyStringOptional学习使用 Using proxies
websiteURLStringRequired返回 captcha 相关信息的页面 url
awsKeyStringOptionalcaptcha 页面返回的 key
awsIvStringOptionalcaptcha 页面返回的 iv
awsContextStringOptionalcaptcha 页面返回的 context
awsChallengeJSStringOptionalcaptcha 页面返回的 challenge.js 链接
awsApiJsStringOptionalcaptcha 页面返回的 jsapi.js 链接
awsProblemUrlStringOptional包含 problemnum_solutions_required 等关键字的 problem 接口 url
awsApiKeyStringOptionalproblem 接口的 api_key
awsExistingTokenStringOptional上一次验证使用的 aws-waf-token
我应该使用哪些参数?

如果您不知道应该传递哪些参数给 capsolver,请参考以下几种不同情况来传递不同参数,如果没有满足您的情况,请联系我们客服处理。

情况传递参数前提条件
情况 1websiteURLaws captcha 页面响应码可能是 405,且能够在 html 里找到以下参数:
window.gokuProps = {"key":"AQID...","iv":"A6we...","context":"rGXm.."}
情况 2websiteURL
awsKey
awsIv
awsContext
awsChallengeJS
在情况一的前提条件下,如果 capsolver 返回错误提示:Captcha render unexpect status code XXX, please pass in the awsKey, awsIv, awsContext and awsChallengeJs parameters,表示服务端没有触发 captcha,请在您的代码里解析 keyivcontext 参数传递给 capsolver。
特别注意
如果您收到了 timeout metering, your parameters have expired, please update awsKey, awsIv, awsContext or awsChallengeJS. 的错误时,表示您传递的这四个参数互相不对应,或者已过期,建议每次请求都实时解析所有参数。
情况 3-1websiteURL
awsChallengeJS
当页面找不到 keyivcontext,但有 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
特殊版本,当页面找不到 keyivcontextchallenge.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 接口包含一个 api_key(每个网站的值通常是不变的)作为 awsApiKey,页面有一个 jsapi.js 作为 awsApiJs,上一次验证的 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", // Required
        "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
    }
}

响应示例

{
    "errorId": 0,
    "errorCode": "",
    "errorDescription": "",
    "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}

获取结果

使用 getTaskResult 方法获取识别结果

根据系统负载,您将在 1s20s 的时间间隔内得到结果

请求示例

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",
})