指南
任务(令牌)
Cloudflare Turnstile

Cloudflare: 解决 Turnstile

TIP

使用 createTask 方法创建任务并使用 getTaskResult 方法获取结果。

DANGER

ℹ️turnstile 类型不需要代理,所以您可以直接使用 AntiTurnstileTaskProxyLess

Turnstile 验证码是另一种试图取代 reCaptcha/hCaptcha 的验证码。我们自动支持以下子类型:

  • turnstile
    • 手动
    • 非交互式
    • 无可见

在调用时无需指定子类型。目前不需要提供您自己的自定义 User-Agent, 我们将忽略此参数。

类型说明状态
img.pngturnstile稳定

任务类型 type 如下:

  • AntiTurnstileTaskProxyLess

创建任务

使用 createTask 创建任务。

在使用 turnstile 的过程中,我们必须输入 websiteURLwebsiteKey,其他参数是可选的。

任务对象结构

属性类型必填说明
typeString必填AntiTurnstileTaskProxyLess
websiteURLString必填目标页面的地址。
websiteKeyString必填Turnstile 网站密钥。
metadataMap<String,String>可选Turnstile 额外数据。 Turnstile 文档
metadata.actionString可选如果存在,则为 Turnstile 元素的 data-action 属性的值。
metadata.cdataString可选如果存在,则为 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 方法获取识别结果

根据系统负载,您将在 1s20s 的间隔内获得结果

示例请求

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)