Incapsula/Imperva
TIP
使用 createTask 方法创建任务,并通过 getTaskResult 方法获取结果。
Note
- 我们支持 reese84 sensors 和 utmvc
- UserAgent 需要匹配。请使用我们支持的 UserAgent
- 建议在您的工作流程中使用良好的 TLS 客户端
type 任务类型如下:
AntiImpervaTaskProxyless
创建任务
使用 createTask 创建任务。
任务对象结构
reese84
| 属性 | 类型 | 必填 | 描述 |
|---|---|---|---|
| type | String | 是 | AntiImpervaTaskProxyless |
| websiteURL | String | 是 | 目标网站的 URL |
| reeseScriptURL | string | 是 | reese84 脚本 URL,通常包含多个短划线 (-) 和随机单词 |
| script | string | 可选 | 通过对 reeseScriptURL 进行 GET 请求获得的 JavaScript |
| userAgent | string | 可选 | 默认为 windows chrome135,目前支持 windows chrome135 - 147 |
| language | string | 可选 | 您请求头中的 Accept-Language |
utmvc
| 属性 | 类型 | 必填 | 描述 |
|---|---|---|---|
| type | String | 是 | AntiImpervaTaskProxyless |
| websiteURL | String | 是 | 目标网站的 URL |
| scriptURL | string | 是 | Incapsula 脚本的 URL,通常包含 _Incapsula_Resource |
| isUtmvc | Bool | 是 | 请设置为 true |
| cookies | Array | 是 | 每个以 incap_ses_ 开头的 cookie。了解 使用 Cookies |
| userAgent | string | 可选 | 默认为 windows chrome135,目前支持 windows chrome135 - 147 |
请求和响应示例
// 请求示例
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"
}
}
// 响应示例
{
"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"
}
}获取结果
获得 taskId 后,您需要提交 taskId 以检索解决方案。响应结构在 getTaskResult 中解释。
根据系统负载,您将在 3s 到 10s 的时间内获得结果。
示例代码
# pip install curl_cffi
import re
from curl_cffi import requests
from urllib.parse import urlparse
api_key = "API_KEY" # TODO: 您的 capsolver API 密钥
proxy = "127.0.0.1:1080" # TODO: 您的代理
website_url = "https://www.targetWebsite.com/" # TODO: 您的目标网站 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("访问网站失败:", res.status_code, res.text)
return
reese_url = parse_reese_url_from_html(res.text)
if not reese_url:
if not cookie:
print("未从网站找到 reeseScriptUrl")
else:
print("成功!")
return
print("从 html 获取 reeseScriptUrl:", 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('获取 reese84 脚本错误:', 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("发送 reese84-payload 失败:", resp.status_code, resp.text)
return
data = resp.json()
token = data.get('token')
if not token:
print("发送 reese84-payload 失败:", resp.status_code, resp.text)
return
return token
def parse_reese_url_from_html(html):
# TODO: 设置您的目标网站的规则
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("创建任务失败:", res.text)
return
print(f"获取到 taskId: {task_id} / 正在获取结果...")
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("解决失败!响应:", 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()