Incapsula/Imperva
TIP
Créez la tâche avec la méthode createTask et obtenez le résultat avec la méthode getTaskResult.
Note
- Nous supportons les capteurs reese84 et utmvc
- L’UserAgent doit correspondre. Veuillez utiliser celui que nous supportons
- Il est recommandé d’utiliser un bon client TLS dans votre flux de travail
Le type de tâche type est le suivant
AntiImpervaTaskProxyless
Créer une tâche
Créez la tâche avec createTask.
Structure de l’objet tâche
reese84
| Propriétés | Type | Requis | Description |
|---|---|---|---|
| type | String | Oui | AntiImpervaTaskProxyless |
| websiteURL | String | Oui | L’URL du site web |
| reeseScriptURL | string | Oui | L’URL du script reese84, elle contient généralement plusieurs tirets (-) et des mots aléatoires |
| script | string | Optionnel | Le JavaScript obtenu en effectuant une requête GET vers l’URL reeseScriptURL |
| userAgent | string | Optionnel | La valeur par défaut est windows chrome135, prend actuellement en charge windows chrome135 - 147 |
| language | string | Optionnel | L’Accept-Language dans vos en-têtes |
utmvc
| Propriétés | Type | Requis | Description |
|---|---|---|---|
| type | String | Oui | AntiImpervaTaskProxyless |
| websiteURL | String | Oui | L’URL du site web |
| scriptURL | string | Oui | L’URL du script d’Incapsula, elle contient généralement _Incapsula_Resource |
| isUtmvc | Bool | Oui | Veuillez le définir à true |
| cookies | Array | Oui | Chaque cookie dont le nom commence par incap_ses_. Apprenez Comment utiliser les cookies |
| userAgent | string | Optionnel | La valeur par défaut est windows chrome135, prend actuellement en charge windows chrome135 - 147 |
Exemple de requête et de réponse
// 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"
}
}Obtenir les résultats
Une fois que vous avez l’ID de tâche, vous devez soumettre l’ID de tâche pour récupérer la solution. La structure de la réponse est expliquée dans getTaskResult.
En fonction de la charge du système, vous obtiendrez les résultats dans un intervalle de 3s à 10s
Exemple de code
# pip install curl_cffi
import re
from curl_cffi import requests
from urllib.parse import urlparse
api_key = "API_KEY" # TODO : votre clé API capsolver
proxy = "127.0.0.1:1080" # TODO : votre proxy
website_url = "https://www.targetWebsite.com/" # TODO : l'URL de votre site web cible
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 : Définissez les règles pour votre site cible
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()