Cloudflare: giải Turnstile
TIP
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.
DANGER
ℹ️ Loại turnstile
không yêu cầu proxy, vì vậy bạn chỉ cần sử dụng AntiTurnstileTaskProxyLess
Captcha Turnstile là một nỗ lực khác để thay thế reCaptcha. Chúng tôi tự động hỗ trợ các loại phụ này:
- turnstile
- Thủ công
- Không tương tác
- Vô hình
Không cần chỉ định loại phụ trong cuộc gọi của bạn. Chưa cần thiết phải cung cấp User-Agent
tùy chỉnh của riêng bạn,
chúng tôi sẽ bỏ qua tham số này.
Loại tác vụ type
như sau
AntiTurnstileTaskProxyLess
Tạo tác vụ
Tạo tác vụ bằng phương thức createTask.
Trong quá trình sử dụng turnstile, chúng ta phải nhập websiteURL
và websiteKey
, các tham số khác là tùy chọn.
Cấu trúc đối tượng tác vụ
Thuộc tính | Kiểu | Bắt buộc | Mô tả |
---|---|---|---|
type | String | Bắt buộc | AntiTurnstileTaskProxyLess |
websiteURL | String | Bắt buộc | Địa chỉ của trang đích. |
websiteKey | String | Bắt buộc | Khóa trang web Turnstile. |
metadata | Map<String,String> | Tùy chọn | Dữ liệu bổ sung của Turnstile. Tài liệu Turnstile |
metadata.action | String | Tùy chọn | Giá trị của thuộc tính data-action của phần tử Turnstile nếu nó tồn tại. |
metadata.cdata | String | Tùy chọn | Giá trị của thuộc tính data-cdata của phần tử Turnstile nếu nó tồn tại. |
Yêu cầu ví dụ
POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": "https://www.yourwebsite.com",
"websiteKey": "0x4XXXXXXXXXXXXXXXXX",
"metadata": {
"action": "login", //optional
"cdata": "0000-1111-2222-3333-example-cdata" //optional
}
}
}
Phản hồi ví dụ
{
"errorId": 0,
"status": "idle",
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006" // record taskId
}
Nhận kết quả
Sử dụng phương thức getTaskResult để nhận kết quả nhận dạng
Tùy thuộc vào tải hệ thống, bạn sẽ nhận được kết quả trong khoảng từ 1s
đến 20s
Yêu cầu ví dụ
POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}
Phản hồi ví dụ
{
"errorId": 0,
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006",
"status": "ready",
"errorCode": null,
"errorDescription": null,
"solution": {
"token": "0.mF74FV8wEufAWOdvOak_xFaVy3lqIDel7SwNhw3GgpICSWwTjYfrQB8mRT1dAJJBEoP7N1sESdp6WH9cTS1T0catWLecG3ayNcjwxVtr3hWfS-dmcBGRTx4xYwI64sAVboYGpIyuDBeMIRC3W8dK35v1nDism9xa595Da5VlXKM7hk7pIXg69lodfiftasIkyD_KUGkxBwxvrmz7dBo10-Y5zvro9hD4QKRjOx7DYj9sumnkyYCDx0m4ImDIIkNswfVTWI2V22wlnpHdvMgdtKYgOIIAU28y9gtdrdDkpkH0GHcDyd15sxQGd9VjwhGZA_mpusUKMsEoGgst2rJ3zA.UWfZupqLlGvlATkPo3wdaw.38d55cd0163610d8ce8c42fcff7b62d8981495cc1afacbb2f14e5a23682a4e13",
"type": "turnstile",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
}
}
Sử dụng yêu cầu SDK
# pip install --upgrade capsolver
# export CAPSOLVER_API_KEY='...'
import capsolver
# capsolver.api_key = "..."
solution = capsolver.solve({
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": "https://www.yourwebsite.com",
"websiteKey": "0x4XXXXXXXXXXXXXXXXX",
"metadata": {
"action": "login" # optional
}
})
Mã mẫu
# pip install requests
import requests
import time
api_key = "YOUR_API_KEY" # your api key of capsolver
site_key = "0x4XXXXXXXXXXXXXXXXX" # site key of your target site
site_url = "https://www.yourwebsite.com" # page url of your target site
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'AntiTurnstileTaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url,
"metadata": {
"action": "" # optional
}
}
}
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('token')
if status == "failed" or resp.get("errorId"):
print("Solve failed! response:", res.text)
return
token = capsolver()
print(token)