Incapsula/Imperva
TIP
Cree la tarea con el método createTask y obtenga el resultado con el método getTaskResult.
Nota
- Soportamos los sensores reese84 y utmvc
- UserAgent debe coincidir. por favor, utilice el que soportamos
- Se recomienda usar un buen cliente TLS en su flujo de trabajo
El tipo de tarea type es el siguiente
AntiImpervaTaskProxyless
Crear Tarea
Cree la tarea con el método createTask.
Estructura del Objeto de Tarea
reese84
| Propiedades | Tipo | Requerido | Descripción |
|---|---|---|---|
| type | String | Sí | AntiImpervaTaskProxyless |
| websiteURL | String | Sí | La URL del sitio web |
| reeseScriptURL | string | Sí | La URL del script reese84, usualmente tiene varios guiones (-) y palabras aleatorias |
| script | string | Opcional | El JavaScript obtenido al hacer una solicitud GET a la reeseScriptURL |
| userAgent | string | Opcional | El predeterminado es windows chrome135, actualmente soporta windows chrome135 - 147 |
| language | string | Opcional | El Accept-Language en sus cabeceras |
utmvc
| Propiedades | Tipo | Requerido | Descripción |
|---|---|---|---|
| type | String | Sí | AntiImpervaTaskProxyless |
| websiteURL | String | Sí | La URL del sitio web |
| scriptURL | string | Sí | La URL del script de Incapsula, usualmente contiene _Incapsula_Resource |
| isUtmvc | Bool | Sí | Por favor, establézcalo en true |
| cookies | Array | Sí | Cada cookie cuyo nombre comienza con incap_ses_. Aprenda Cómo usar cookies |
| userAgent | string | Opcional | El predeterminado es windows chrome135, actualmente soporta windows chrome135 - 147 |
Ejemplo de Solicitud y Respuesta
// Example request
POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json
Payload:
{
"clientKey": "...",
"task": {
"type": "AntiImpervaTaskProxyLess",
"script": "(function() {...",
"reeseScriptUrl": "https://www.targetWebsite.com/s-weakes-Sir-Day-could-to-thy-them-breame-to-gre/1860025529848880788?s=xlD1csYd",
"websiteURL": "https://www.targetWebsite.com/",
"language": "en-US,en;q=0.9",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36"
}
}
// Example Response
{
"errorId": 0,
"taskId": "...",
"status": "ready",
"solution": {
"reese84Payload": "{\"solution\":{\"interrogation\":{\"p\":\"9pp4bv7Sp0073gA1xoN9Aoo...E\",\"st\":1744612535,\"sr\":3851658681,\"cr\":937075512,\"og\":2},\"version\":\"beta\"},\"old_token\":null,\"error\":null,\"performance\":{\"interrogation\":488}}",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36"
}
}Obtención de Resultados
Después de tener 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 el intervalo de 3s a 10s
Código de Ejemplo
# pip install curl_cffi
import re
from curl_cffi import requests
from urllib.parse import urlparse
api_key = "API_KEY" # TODO: your api key of capsolver
proxy = "127.0.0.1:1080" # TODO: your proxy
website_url = "https://www.targetWebsite.com/" # TODO: your target website URL
default_user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36'
parsed_url = urlparse(website_url)
website_host = "https://" + parsed_url.hostname
session = requests.Session(impersonate="chrome133a")
session.proxies = {
"http": proxy,
"https": proxy,
}
def view_website(cookie, user_agent):
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'sec-ch-ua': '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
'sec-ch-ua-mobile': '?0',
'user-agent': user_agent,
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'accept-language': 'en-US,en;q=0.9',
'priority': 'u=0, i',
}
if cookie:
headers["cookie"] = "reese84=" + cookie
res = session.get(website_url, headers=headers, verify=False)
if res.status_code != 200:
print("view website failed:", res.status_code, res.text)
return
reese_url = parse_reese_url_from_html(res.text)
if not reese_url:
if not cookie:
print("reeseScriptUrl not found from website")
else:
print("succeed!")
return
print("get reeseScriptUrl from html:", reese_url)
return reese_url
def get_reese84_script(reese_url, user_agent):
headers = {
'sec-ch-ua-platform': '"Windows"',
'user-agent': user_agent,
'sec-ch-ua': '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
'sec-ch-ua-mobile': '?0',
'accept': '*/*',
'sec-fetch-site': 'same-origin',
'sec-fetch-mode': 'no-cors',
'sec-fetch-dest': 'script',
'referer': website_url,
'accept-language': 'en-US,en;q=0.9',
}
res = session.get(reese_url, headers=headers, verify=False)
if res.status_code != 200:
print('get reese84 script error:', res.status_code, res.text)
return
return res.text
def post_reese_payload(reese_url, payload, user_agent):
if "?" in reese_url:
reese_url = reese_url.split("?")[0]
headers = {
'sec-ch-ua-platform': '"Windows"',
'user-agent': user_agent,
'accept': 'application/json; charset=utf-8',
'sec-ch-ua': '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
'content-type': 'text/plain; charset=utf-8',
'sec-ch-ua-mobile': '?0',
'origin': website_host,
'sec-fetch-site': 'same-origin',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'referer': website_url,
'accept-language': 'en-US,en;q=0.9',
'priority': 'u=1, i',
}
resp = session.post(reese_url, headers=headers, data=payload, verify=False)
if resp.status_code != 200:
print("post reese84-payload failed:", resp.status_code, resp.text)
return
data = resp.json()
token = data.get('token')
if not token:
print("post reese84-payload failed:", resp.status_code, resp.text)
return
return token
def parse_reese_url_from_html(html):
# TODO: Set the rules for your target site
result = re.search(r'scriptElement\.src = "(.*)"', html)
if not result:
return
reese_url = result.group(1)
if reese_url.startswith("/"):
reese_url = website_host + reese_url
return reese_url
def get_reese84_sensor(reese_url, page_url, script):
payload = {
"clientKey": api_key,
"task": {
"type": "AntiImpervaTaskProxyLess",
"reeseScriptUrl": reese_url,
"websiteURL": page_url,
"script": script,
}
}
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:
payload = {"clientKey": api_key, "taskId": task_id}
res = requests.post("https://api.capsolver.com/getTaskResult", json=payload, verify=False)
print(res.text)
resp = res.json()
status = resp.get("status")
if status == "ready":
return resp.get("solution", "")
if status == "failed" or resp.get("errorId"):
print("Solve failed! response:", res.text)
return
def main():
reese_url = view_website("", default_user_agent)
if not reese_url:
return
script = get_reese84_script(reese_url, default_user_agent)
if not script:
return
solution = get_reese84_sensor(reese_url, website_url, script)
if not solution:
return
cookie = post_reese_payload(reese_url, solution["reese84Payload"], solution["userAgent"])
if not cookie:
return
view_website(cookie, solution["userAgent"])
if __name__ == '__main__':
main()