AwsWafCaptcha: 解决 AWS WAF
TIP
通过 createTask 创建任务, 然后通过 getTaskResult 获取识别结果
任务类型type
如下:
AntiAwsWafTask
需要转入您自己的代理AntiAwsWafTaskProxyLess
无需代理或已内置代理
创建任务
通过 createTask 创建任务
参数结构
Properties | Type | Required | Description |
---|---|---|---|
type | String | Required | AntiAwsWafTask AntiAwsWafTaskProxyLess |
proxy | String | Optional | 学习使用 Using proxies |
websiteURL | String | Required | 返回 captcha 相关信息的页面 url |
awsKey | String | Optional | captcha 页面返回的 key 值 |
awsIv | String | Optional | captcha 页面返回的 iv 值 |
awsContext | String | Optional | captcha 页面返回的 context 值 |
awsChallengeJS | String | Optional | captcha 页面返回的 challenge.js 链接 |
awsApiJs | String | Optional | captcha 页面返回的 jsapi.js 链接 |
awsProblemUrl | String | Optional | 包含 problem 、num_solutions_required 等关键字的 problem 接口 url |
awsApiKey | String | Optional | problem 接口的 api_key 值 |
awsExistingToken | String | Optional | 上一次验证使用的 aws-waf-token |
我应该使用哪些参数?
如果您不知道应该传递哪些参数给 capsolver,请参考以下几种不同情况来传递不同参数,如果没有满足您的情况,请联系我们客服处理。
情况 | 传递参数 | 前提条件 |
---|---|---|
情况 1 | websiteURL | aws captcha 页面响应码可能是 405,且能够在 html 里找到以下参数:window.gokuProps = {"key":"AQID...","iv":"A6we...","context":"rGXm.."} |
情况 2 | websiteURL awsKey awsIv awsContext awsChallengeJS | 在情况一的前提条件下,如果 capsolver 返回错误提示:Captcha render unexpect status code XXX, please pass in the awsKey, awsIv, awsContext and awsChallengeJs parameters ,表示服务端没有触发 captcha,请在您的代码里解析 key ,iv ,context 参数传递给 capsolver。特别注意 如果您收到了 timeout metering, your parameters have expired, please update awsKey, awsIv, awsContext or awsChallengeJS. 的错误时,表示您传递的这四个参数互相不对应,或者已过期,建议每次请求都实时解析所有参数。 |
情况 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 接口包含一个 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 方法获取识别结果
根据系统负载,您将在 1s
到 20s
的时间间隔内得到结果
请求示例
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",
})