Guía
Tarea (Token)
AWS WAF

AwsWafCaptcha: resolviendo AWS WAF

TIP

Cree la tarea con el método createTask y obtenga el resultado con el método getTaskResult.

Los tipos de tarea types que admitimos:

  • AntiAwsWafTask este tipo de tarea requiere sus propios proxies.
  • AntiAwsWafTaskProxyLess este tipo de tarea no requiere sus propios proxies.

Crear Tarea

Cree una tarea de reconocimiento con el método createTask.

Estructura del Objeto de Tarea

PropertiesTypeRequiredDescription
typeStringRequiredAntiAwsWafTask
AntiAwsWafTaskProxyLess
proxyStringOptionalAprenda Cómo usar proxies
websiteURLStringRequiredLa URL de la página que devuelve información relacionada con el captcha
awsKeyStringOptionalEl valor key devuelto por la página de captcha
awsIvStringOptionalEl valor iv devuelto por la página de captcha
awsContextStringOptionalEl valor context devuelto por la página de captcha
awsChallengeJSStringOptionalEl enlace challenge.js devuelto por la página de captcha
awsApiJsStringOptionalEl enlace jsapi.js devuelto por la página de captcha
awsProblemUrlStringOptionalLa URL del endpoint problem que contiene palabras clave como problem, num_solutions_required, etc.
awsApiKeyStringOptionalEl valor api_key del endpoint problem
awsExistingTokenStringOptionalEl aws-waf-token utilizado para la última verificación
¿Qué parámetros debo usar?

Si no está seguro de qué parámetros pasar a capsolver, consulte los siguientes escenarios para diferentes combinaciones de parámetros. Si su situación no está cubierta, comuníquese con nuestro servicio de atención al cliente para obtener ayuda.

SituationPassing ParametersPrerequisites
Situation 1websiteURLEl código de respuesta de la página de captcha de AWS puede ser 405, y los siguientes parámetros se pueden encontrar en el html:
window.gokuProps = {"key":"AQID...","iv":"A6we...","context":"rGXm.."}
Situation 2websiteURL
awsKey
awsIv
awsContext
awsChallengeJS
Bajo la condición previa de la situación 1, si capsolver devuelve un mensaje de error:Captcha render unexpect status code XXX, please pass in the awsKey, awsIv, awsContext and awsChallengeJs parameters, Indica que el servidor no activó el captcha. Por favor, analice manualmente los parámetros key, iv y context y páselos a capsolver.
Atención especial
Si recibe un mensaje de error que dice timeout metering, your parameters have expired, please update awsKey, awsIv, awsContext or awsChallengeJS., indica que los cuatro parámetros proporcionados no se corresponden entre sí o han caducado. Se recomienda analizar todos los parámetros en tiempo real para cada solicitud.
Situation 3-1websiteURL
awsChallengeJS
Cuando la página no puede encontrar key, iv, context, pero tiene challenge.js, pase challenge.js a capsolver como el valor de awsChallengeJS.
Situation 3-2websiteURL
awsApiJs
Basado en la situación 3-1, si no está claro de dónde viene challenge.js, pero la página tiene jsapi.js, significa que challenge.js se ensambla a partir del código de jsapi.js, entonces jsapi.js se puede pasar directamente a capsolver como el valor de awsApiJs.
Situation 4websiteURL
awsProblemUrl
En casos especiales, cuando la página no puede encontrar key, iv, context, challenge.js, y solo tiene captcha.js, debe pasar la URL del endpoint del problema a capsolver. awsProblemUrl debe contener valores como problem y num_solutions_required. Estos valores se pueden encontrar buscando visualSolutionsRequired en el html de la página.

Ejemplo completo de 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
Situation 5websiteURL
awsApiKey
awsApiJs
awsExistingToken
Esto suele ocurrir en situaciones que requieren verificación secundaria. El endpoint problem contiene una api_key (cuyo valor suele ser constante para cada sitio web) como awsApiKey. La página tiene un jsapi.js como awsApiJs, y el aws-waf-token de la verificación anterior se pasa a capsolver como awsExistingToken

Ejemplo de Solicitud

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
    }
}

Después de enviarnos la tarea, debería recibir en la respuesta un ‘taskId’ si fue exitoso. Por favor, lea errorCode: lista completa de errores si no recibió el ID de la tarea. Para más información, también puede consultar esta entrada de blog Cómo resolver el token de captcha de AWS Amazon.

Ejemplo de Respuesta

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

Obtención de Resultados

Una vez que tenga el taskId, debe enviar el taskId para recuperar la solución. La estructura de la respuesta se explica en getTaskResult.

Dependiendo de la carga del sistema, obtendrá los resultados en un intervalo de 5s a 30s.

Ejemplo de Solicitud

POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json
 
{
    "clientKey": "YOUR_API_KEY",
    "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}

Ejemplo de Respuesta

{
  "errorId": 0,
  "taskId": "646825ef-9547-4a29-9a05-50a6265f9d8a",
  "status": "ready",
  "solution": {
    "cookie": "223d1f60-0e9f-4238-ac0a-e766b15a778e:EQoAf0APpGIKAAAA:AJam3OWpff1VgKIJxH4lGMMHxPVQ0q0R3CNtgcMbR4VvnIBSpgt1Otbax4kuqrgkEp0nFKanO5oPtwt9+Butf7lt0JNe4rZQwZ5IrEnkXvyeZQPaCFshHOISAFLTX7AWHldEXFlZEg7DjIc="
  }
}

Uso de la Solicitud 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"
})

Código de Ejemplo

# pip install requests
import requests
import time
 
api_key = "YOUR_API_KEY"  # TODO: your api key of capsolver
site_url = "https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest"  # TODO: page url of your site
 
 
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)