Incapsula/Imperva
MẸO
Tạo tác vụ bằng phương thức createTask và nhận kết quả bằng phương thức getTaskResult.
Lưu ý
- Chúng tôi hỗ trợ các cảm biến reese84 và utmvc
- UserAgent cần phải khớp. vui lòng sử dụng cái mà chúng tôi hỗ trợ
- Khuyên dùng một client TLS tốt trong quy trình làm việc của bạn
Loại tác vụ type như sau
AntiImpervaTaskProxyless
Tạo Tác Vụ
Tạo tác vụ bằng createTask.
Cấu Trúc Đối Tượng Tác Vụ
reese84
| Thuộc tính | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
| type | String | Có | AntiImpervaTaskProxyless |
| websiteURL | String | Có | URL của trang web |
| reeseScriptURL | string | Có | URL script reese84, thường có nhiều dấu gạch ngang (-) và các từ ngẫu nhiên |
| script | string | Tùy chọn | Đoạn mã JavaScript lấy được từ yêu cầu GET đến reeseScriptURL |
| userAgent | string | Tùy chọn | Mặc định là windows chrome135, hiện hỗ trợ windows chrome135 - 147 |
| language | string | Tùy chọn | Accept-Language trong các tiêu đề (headers) của bạn |
utmvc
| Thuộc tính | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
| type | String | Có | AntiImpervaTaskProxyless |
| websiteURL | String | Có | URL của trang web |
| scriptURL | string | Có | URL script của incapsula, thường chứa _Incapsula_Resource |
| isUtmvc | Bool | Có | Vui lòng đặt thành true |
| cookies | Array | Có | Mỗi cookie có tên bắt đầu bằng incap_ses_. Tìm hiểu Cách Sử Dụng Cookies |
| userAgent | string | Tùy chọn | Mặc định là windows chrome135, hiện hỗ trợ windows chrome135 - 147 |
Yêu Cầu và Phản Hồi Mẫu
// 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"
}
}Nhận Kết Quả
Sau khi có taskId, bạn cần gửi taskId để truy xuất giải pháp. Cấu trúc phản hồi được giải thích trong getTaskResult.
Tùy thuộc vào tải hệ thống, bạn sẽ nhận được kết quả trong khoảng thời gian từ 3s đến 10s
Mã Mẫu
# 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()