Cloudflare: 解决 Turnstile
TIP
使用 createTask 方法创建任务并使用 getTaskResult 方法获取结果。
DANGER
ℹ️turnstile
类型不需要代理,所以您可以直接使用 AntiTurnstileTaskProxyLess
Turnstile 验证码是另一种试图取代 reCaptcha 的验证码。我们自动支持以下子类型:
- turnstile
- 手动
- 非交互式
- 无可见
在调用时无需指定子类型。目前不需要提供您自己的自定义 User-Agent
,
我们将忽略此参数。
类型 | 说明 | 状态 |
---|---|---|
turnstile | 稳定 |
任务类型 type
如下:
AntiTurnstileTaskProxyLess
创建任务
使用 createTask 创建任务。
在使用 turnstile 的过程中,我们必须输入 websiteURL
和 websiteKey
,其他参数是可选的。
任务对象结构
属性 | 类型 | 必填 | 说明 |
---|---|---|---|
type | String | 必填 | AntiTurnstileTaskProxyLess |
websiteURL | String | 必填 | 目标页面的地址。 |
websiteKey | String | 必填 | Turnstile 网站密钥。 |
metadata | Map<String,String> | 可选 | Turnstile 额外数据。 Turnstile 文档 |
metadata.action | String | 可选 | 如果存在,则为 Turnstile 元素的 data-action 属性的值。 |
metadata.cdata | String | 可选 | 如果存在,则为 Turnstile 元素的 data-cdata 属性的值。 |
示例请求
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", //可选
"cdata": "0000-1111-2222-3333-example-cdata" //可选
}
}
}
示例响应
{
"errorId": 0,
"status": "idle",
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006" // 记录 taskId
}
获取结果
使用 getTaskResult 方法获取识别结果
根据系统负载,您将在 1s
到 20s
的间隔内获得结果
示例请求
POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}
示例响应
{
"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"
}
}
使用 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
}
})
示例代码
# 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)