logo
bars
按解决付费 · API

Cloudflare Challenge 求解器

CapMonster Cloud 是带有 API 的 Cloudflare Challenge 求解器。它返回 token 或 cf_clearance cookie,因此您的自动化无需手动步骤即可继续。

最后更新:

免费测试:0.10 美元测试余额 ↓
平均求解时间
12 – 14 s
成功率
99%
每 1000 个代币
$ 1.30

Cloudflare Challenge 求解器定价

验证码
价格 (USD)
$ 1.30
1000 代币
选择Cloudflare Challenge或旋转门

Cloudflare Challenge 与 Cloudflare Turnstile 对比

如何区分挑战和旋转门

Cloudflare Challenge 和 Turnstile 小部件可能看起来相同。挑战并不总是一个单独的“请稍等……”页面:它可以设计样式、嵌入到网站中或使其看起来像常规的 Turnstile 小部件,因此您无法通过外观区分它们。

使用哪种 CapMonster Cloud 求解器

Cloudflare Turnstile

小部件
你在哪里看到它
页面或表单内的小部件
它返回什么
cf-turnstile-response 中的 token
CapMonster 页面
Cloudflare Turnstile 求解器

Cloudflare Challenge

403 · challenge-form
你在哪里看到它
嵌入网站或间隙页面的样式检查;在第一个请求上由 403 和带有 __cf_chl_f_tk= 的 challenge-form 标识
它返回什么
token 或 cf_clearance cookie
CapMonster 页面
本页:Cloudflare Challenge 求解器

如果存在这些标志,则它是 Cloudflare Challenge:使用此页面上的 Cloudflare Challenge 求解器,该求解器返回 token 或 cf_clearance cookie。否则,请使用 Cloudflare Turnstile 求解器。

Cloudflare Challenge 求解器比较

该表列出了四种 Cloudflare Challenge 求解服务的每 1000 次求解的价格、平均求解时间和求解成功率。

参数CapMonster Cloud2验证码反验证码最佳验证码解算器
每1000个的价格解决
$ 1.30$1.45$2.00$1.80
平均求解时间
12 – 14 s14 – 18 s18 – 22 s22 – 30 s
解决成功率
99%97%95%80%

提供商列出的 Cloudflare Turnstile 价格; Cloudflare Challenge未单独列出。

2Captcha、Anti-Captcha 和 BestCaptchaSolver 是其各自所有者的商标。 CapMonster Cloud 不隶属于这些实体。绩效指标基于 2026 年 8 月 26 日进行的内部基准测试。定价比较基于截至 30.09.2026 的公开数据。

免费测试

在几秒钟内解决 Cloudflare Challenge

99%成功通过。立即测试您自己的目标站点的稳定性。我们不保证 100% 的成功率:CAPTCHA 类型和目标站点配置可能随时更改。

$0.10

新用户可获得 0.10 美元的测试余额来尝试 CapMonster Cloud。

  1. 1. 在 CapMonster Cloud 注册。

  2. 2. 通过在线聊天或 support@capmonster.cloud 联系支持,并提供与账户绑定的邮箱。

无需信用卡·Python、Node.js、C# 的现成 SDK

团队使用 Cloudflare Challenge 求解的目的

质量保证和端到端测试

在您拥有或允许测试的页面上使用 Playwright、Puppeteer 或 Selenium 在 CI/CD 中运行注册、结账和表单流程。

监控

检查 Cloudflare Challenge 后面的页面在发布和规则更改后是否保持可访问。

公开数据

从受 Cloudflare Challenge 保护的开放页面收集公开数据。

无障碍

支持在加载前显示验证页面的网站上的自动化辅助工作流程。

人工智能代理

当工作流程遇到挑战时,让代理通过 MCP 请求 token 或 cf_clearance cookie。

仅限合法使用

使用 CapMonster Cloud 获取公开数据以及您拥有或有权测试的站点。未经许可,禁止通过登录或付费专区收集第三方数据。

Cloudflare 挑战的类型

Cloudflare 如何发出和检查挑战

Cloudflare 提供三种类型的质询页面:JS Challenge、Managed Challenge 和 Interactive Challenge。是否显示挑战由WAF规则或Bot Management决定。 CapMonster Cloud 涵盖以下三种挑战类型; WAF / Bot Management 是更广泛的产品,单独列出。

Sources:Cloudflare 文档 — 挑战如何运作 · 间隙挑战页面 · 攻击模式下

“5秒挑战”

1. JS Challenge

非交互式插页式测试:浏览器运行 JavaScript,Cloudflare 在页面加载之前对结果进行评分。不需要用户 action。

出现位置
带有后台检查的中间页面
返回结果
cf_clearance cookie(默认)

包括。 Under Attack Mode

2. Managed Challenge

使用 Cloudflare Managed Challenge,Cloudflare 从请求特征和浏览器信号中动态选择检查。 Under Attack Mode 使用 Managed Challenge。

出现位置
中间页面,由 Cloudflare 选择检查类型
返回结果
cf_clearance cookie(默认)

间隙页面上的小部件

3. Interactive Challenge

Interactive Challenge 页面需要访问者与挑战互动才能通过。

出现位置
需要强制交互式验证的中间页面
返回结果
cf_clearance cookie(默认)

4. WAF / Bot Management

规则和评分层决定何时提供 Cloudflare 机器人挑战。 Cloudflare 使用检测引擎计算此决策,包括:

出现位置
处理请求和评估风险的规则层
返回结果
本身不返回任何结果——根据风险评分触发上述操作之一(或阻止请求)

比三种挑战类型更广泛,而不是它们的同义词。

  • Heuristics engine 将每个请求与已知机器人指纹数据库进行匹配。
  • JS Detections engine 可选的、不可见的客户端 JavaScript 检查标记无头浏览器。
  • Machine Learning engine 一种监督模型,可根据数十亿个每日请求的模式生成机器人分数 1-99。

Sources: 机器人分数 · 机器人检测引擎 · JavaScript 检测

Cloudflare Challenge 工作流程

  1. 1. 请求

    浏览器请求受保护的页面。 Cloudflare Bot Management 通过 TLS 指纹、IP 信誉和行为信号对请求进行评分。

  2. 2. 机器人得分

    启发式、JS 检测和机器学习引擎产生从 1 到 99 的机器人分数,WAF 规则决定是否接受挑战。

  3. 3. 插页式页面

    如果请求看起来可疑,Cloudflare 将返回“Just a moment...”页面,状态代码为 403,并运行 JS Challenge、Managed Challenge 或 Interactive Challenge。

  4. 4. cf_clearance

    检查通过后,Cloudflare 会发出与访问者和设备绑定的 cf_clearance cookie,并在有限时间内有效。

  5. 5. 访问

    浏览器加载带有 cookie 的原始页面。 Cloudflare 不断重新评估会话行为 (Precursor clearance),并可能面临新的挑战。

cf_clearance cookie 是什么?

cf_clearance 是访客通过 Cloudflare Challenge 后发出的 cookie Cloudflare。浏览器将其与以下请求一起发送到受保护的站点,并且页面将打开,而无需重复询问。

根据Cloudflare的文档,cookie的属性:

访客和设备

绑定到访问者和发给的设备。

终身

有效期有限(默认30分钟,站点设置为挑战通道):长时间运行的脚本一旦过期必须再次通过检查。

接入验证

其本身并不是保证:Precursor clearance 不断重新评估会话行为,即使 cookie 尚未过期,也可能会触发重复质询。

是什么使 cf_clearance cookie 无效

装订

访客或设备变更

访问权限被重置:cookie 与访问者及其发送到的设备相关联

终身

到期日

cookie 停止工作;脚本必须再次通过检查

行为

Precursor clearance

Cloudflare 可以降低或重置许可级别,并在流量看起来可疑时进行重复质询

令牌或 cf_clearance:请求哪个结果

对于使用 CapMonster Cloud 获取 token 或 cf_clearance 的开发人员

TurnstileTask 的 cloudflareTaskType 参数决定 CapMonster Cloud 返回的内容。根据目标站点的要求选择选项:用于页面上挑战 callback 的 token,或用于您进一步请求的 cf_clearance cookie。

代币和cf_clearance

参数代币cf_clearance
cloudflareTaskTypetokencf_clearance
代理可选默认在 CapMonster Cloud 代理上运行必需您自己的代理
websiteKeyCloudflare Challenge 密钥,例如0x4AAAAAAABUYP0XeMJF0xoy任何字符串,例如xxxxxx
页面数据pageAction, data (cData), pageData (chlPageData)htmlPageBase64 — 403“Just a moment”页面的 Base64
结果solution.tokensolution.cf_clearance
在哪里使用它页面上的挑战 callbackCookie: cf_clearance=<value> 标头或浏览器上下文

支持的代理类型 (cf_clearance)

proxyType描述
http正规HTTP代理
https用于一些自定义代理
socks4SOCKS4代理
socks5SOCKS5代理

完整参数参考:Cloudflare Challenge 任务文档。

如何使用 Cloudflare Challenge 求解器

CapMonster Cloud API 充当 cf_clearance 求解器:它接受任务参数,在其服务器上处理它们并返回 token 或 cf_clearance cookie。解决 Cloudflare Challenge 需要四个步骤:获取 API 密钥、发送任务、轮询结果,并在您自己的请求中使用返回的 token 或 cookie。

你的脚本CapMonster Cloud API目标站点

获取您的 API 密钥

  • 在CapMonster Cloud中创建一个帐户。
  • 打开仪表板并找到您的API密钥。
  • 使用此密钥作为请求中的 clientKey 参数。

发送任务 — createTask

使用类型 TurnstileTask 调用 createTask。 cloudflareTaskType 参数决定您返回的内容:token 或 cf_clearance cookie。根据目标站点的要求选择选项。参见如何区分挑战与旋转门。

选项 1 · 挑战 (token) — 默认在 CapMonster Cloud 代理上运行。必填字段:

参数描述
类型TurnstileTask
websiteURL解决挑战的页面的 URL
websiteKeyCloudflare Challenge 密钥,例如0x4AAAAAAABUYP0XeMJF0xoy
cloudflareTaskTypetoken
pageAction验证码 callback 中的 action 字段,通常为 managed 或 non-interactive
userAgent当前CapMonster Cloud支持的UA。您可以在https://capmonster.cloud/api/useragent/actual获取最新值。
数据cData 参数的值
pageDatachlPageData 参数的值

可选:apiJsUrl 和代理字段。仅当站点不接受token或内置服务受到限制时才需要自己的代理;有IP授权,白名单65.21.190.34。

请求示例:

json
{
  "clientKey": "API_KEY",
  "task": {
    "type": "TurnstileTask",
    "websiteURL": "https://yourwebsite.com/page-with-cf-challenge",
    "websiteKey": "your-website-key",
    "cloudflareTaskType": "token",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36",
    "pageAction": "your-page-action",
    "pageData": "your-page-data",
    "data": "your-data"
  }
}

选项 2 · 挑战 (cookie) — 需要您自己的代理。必填字段:

参数描述
类型TurnstileTask
websiteURL解决挑战的页面的 URL
websiteKey可以传递任何字符串,例如xxxxxx
cloudflareTaskTypecf_clearance
htmlPageBase64“Just a moment”页面的 Base64 返回状态 403
userAgent当前CapMonster Cloud支持的UA。您可以在https://capmonster.cloud/api/useragent/actual获取最新值。
proxyTypehttp、https(对于某些自定义代理)、socks4、socks5
proxyAddress, proxyPort, proxyLogin, proxyPassword你的代理人。不允许透明代理和本地机器代理。

请求示例:

json
{
  "clientKey": "API_KEY",
  "task": {
    "type": "TurnstileTask",
    "websiteURL": "https://yourwebsite.com/page-with-cf-challenge",
    "websiteKey": "xxxxxxxxxx",
    "cloudflareTaskType": "cf_clearance",
    "htmlPageBase64": "PCFET0NUWVBFIGh0...vYm9keT48L2h0bWw+",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36",
    "proxyType": "your-proxy-type",
    "proxyAddress": "your-proxy-address",
    "proxyPort": 1234,
    "proxyLogin": "your-proxy-login",
    "proxyPassword": "your-proxy-password"
  }
}

端点和响应 — 两个选项相同:

text
POST https://api.capmonster.cloud/createTask
{
  "errorId": 0,
  "taskId": 407533072,
  "errorCode": null,
  "errorDescription": null
}

轮询结果 — getTaskResult

使用 taskId 轮询 getTaskResult,直到 status 变为 ready。两个选项的请求是相同的; solution 对象携带您要求的任何结果。

端点和请求:

text
POST https://api.capmonster.cloud/getTaskResult
{
  "clientKey": "API_KEY",
  "taskId": 407533072,
  "errorCode": null,
  "errorDescription": null
}

选项 1 · 挑战 (token) — solution.token

json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36",
    "token": "0.iGX3xsyFCkbGePM3jP4P4khLo6TrLukt8ZzBvwuQOvbC...f61f3082"
  }
}

页面调用callback函数时使用token。

选项 2 · 挑战 (cookie) — solution.cf_clearance

json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "cf_clearance": "1tarGvbY2_ZhQdYxpSBloao.FoOn9VtcJtmb_IQ_hCE-1761217338-1.2.1.1-vyVPoLYIGX0...ZHi.w"
  }
}

您添加到浏览器或与原始 HTTP 请求一起发送的特殊 Cloudflare cookie。

使用返回的token或cookie

如果您使用 cookie,请在原始 HTTP 请求的 Cookie: cf_clearance=<value> 标头中传递其值,或者在再次请求受保护的 URL 之前在浏览器上下文中设置它。

如果您使用token,请将其传递给页面上的挑战callback。

如何查找Cloudflare Challenge参数

token 选项需要挑战开始时页面传递给 turnstile.render 的值:sitekey (websiteKey)、action (pageAction)、cData(数据)和 chlPageData (pageData)。 cookie选项需要htmlPageBase64中挑战页面的HTML; websiteKey 可以是任何字符串。

如何查找Cloudflare Challenge参数
javascript
(function () {
  const obj = {
    render: function () {
      const { action, cData, chlPageData } = arguments[1];
      console.table([["action", action], ["data", cData], ["pageData", chlPageData]]);
    }
  };
  Object.defineProperty(window, "turnstile", { get: () => obj });
})();
sitekey → websiteKey
action → pageAction
cData → data
chlPageData → pageData
  1. 在页面的其他脚本加载之前运行此 JavaScript — 它替换 window.turnstile 并打印传递给 render 的参数。

  2. 从控制台中的表中读取action(pageAction)、cData(数据)和chlPageData(pageData); sitekey (websiteKey) 在同一对象中传递。 pageAction 通常为 managed 或 non-interactive。

  3. 要自动收集值,请使用由 Playwright(常规或无头)控制的浏览器:将 window.turnstile 包装在 Proxy 中并拦截 render。 JavaScript、Python 和 C# 中的现成示例位于 文档 中。

  4. 有些值在挑战页面的每次渲染时都会发生变化,因此在收集它们后立即创建任务。

javascript
fetch('https://example.com')
  .then(res => res.arrayBuffer())
  .then(buf => console.log(btoa(String.fromCharCode(...new Uint8Array(buf)))));
  1. 请求受保护的站点;它返回“Just a moment...”页面,状态代码为 403。

  2. 在 Base64 中对该页面进行编码 - 这是 htmlPageBase64(该代码片段显示了一种方法;带有 page.content() 的 Playwright 示例位于 文档 中)。

  3. 将任何字符串作为 websiteKey 传递(例如 xxxxxx)并使用您自己的代理。

  4. 收集值后立即创建任务。

Cloudflare Challenge 官方 SDK 解算器

CapMonster Cloud 提供现成的库,方便在 Python、JavaScript (Node.js) 和 C# 中工作。
以下代码示例展示了如何使用 createTask 创建 CAPTCHA 求解任务,并使用我们的客户端库通过 getTaskResult 检索结果。
官方SDK
Python
python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import TurnstileRequest
API_KEY = "YOUR_API_KEY"
async def solve_turnstile_challenge():
    client = CapMonsterClient(options=ClientOptions(api_key=API_KEY))
    # 没有代理的基本示例; CapMonster Cloud 自动使用自己的代理
    turnstile_request = TurnstileRequest(
        websiteURL="https://yourwebsite.com/page-with-cf-challenge",
        websiteKey="your-website-key",
        data="your-data",
        pageAction="managed",
        cloudflareTaskType="token",
        pageData="your-page-data",
        userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36",
    )
    balance = await client.get_balance()
    print("Balance:", balance)
    result = await client.solve_captcha(turnstile_request)
    print("Solution:", result)
asyncio.run(solve_turnstile_challenge())
python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import TurnstileRequest
from capmonstercloudclient.requests.proxy_info import ProxyInfo
API_KEY = "YOUR_API_KEY"
async def main():
    client = CapMonsterClient(options=ClientOptions(api_key=API_KEY))
    # Cloudflare cf_clearance 只能使用自己的代理解决
    proxy = ProxyInfo(proxyType="http", proxyAddress="123.45.67.89", proxyPort=8080, proxyLogin="username", proxyPassword="password")
    turnstile_request = TurnstileRequest(
        websiteURL="https://yourwebsite.com/page-with-cf-challenge",
        websiteKey="your-website-key",
        cloudflareTaskType="cf_clearance",
        proxy=proxy,
        htmlPageBase64="your_html_page_base64",
        userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36",
    )
    balance = await client.get_balance()
    print("Balance:", balance)
    result = await client.solve_captcha(turnstile_request)
    print("Solution:", result)
asyncio.run(main())
Node.js
javascript
const { CapMonsterCloudClientFactory, ClientOptions, TurnstileRequest } = require("@zennolab_com/capmonstercloud-client");
const API_KEY = "YOUR_API_KEY";
(async () => {
  const client = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: API_KEY }));
  // 没有代理的基本示例; CapMonster Cloud 自动使用自己的代理
  const turnstileRequest = new TurnstileRequest({
    websiteURL: "https://yourwebsite.com/page-with-cf-challenge",
    websiteKey: "your-website-key",
    data: "your-data",
    pageAction: "managed",
    cloudflareTaskType: "token",
    pageData: "your-page-data",
    userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36",
  });
  const balance = await client.getBalance();
  console.log("Balance:", balance);
  const result = await client.Solve(turnstileRequest);
  console.log("Solution:", result.solution);
})();
javascript
const { CapMonsterCloudClientFactory, ClientOptions, TurnstileRequest } = require("@zennolab_com/capmonstercloud-client");
const API_KEY = "YOUR_API_KEY";
async function solveTurnstileCfClearance() {
  const client = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: API_KEY }));
  // Cloudflare cf_clearance 只能使用自己的代理解决
  const proxy = { proxyType: "http", proxyAddress: "123.45.67.89", proxyPort: 8080, proxyLogin: "username", proxyPassword: "password" };
  const turnstileRequest = new TurnstileRequest({
    websiteURL: "https://yourwebsite.com/page-with-cf-challenge",
    websiteKey: "xxxxxxx",
    cloudflareTaskType: "cf_clearance",
    proxy,
    htmlPageBase64: "your_html_page_base64",
    userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36",
  });
  const balance = await client.getBalance();
  console.log("Balance:", balance);
  const result = await client.Solve(turnstileRequest);
  console.log("Solution:", result.solution);
}
solveTurnstileCfClearance().catch(console.error);
C#
csharp
using System;
using System.Threading.Tasks;
using Zennolab.CapMonsterCloud;
using Zennolab.CapMonsterCloud.Requests;
class Program
{
    static async Task Main(string[] args)
    {
        var clientOptions = new ClientOptions { ClientKey = "YOUR_API_KEY" };
        var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
        // 没有代理的基本示例; CapMonster Cloud 自动使用自己的代理
        var turnstileRequest = new TurnstileRequest
        {
            WebsiteUrl = "https://yourwebsite.com/page-with-cf-challenge",
            WebsiteKey = "your-website-key",
            Data = "your-data",
            PageAction = "managed",
            CloudflareTaskType = "token",
            PageData = "your-page-data",
            UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36"
        };
        var balance = await cmCloudClient.GetBalanceAsync();
        Console.WriteLine("Balance: " + balance);
        var turnstileResult = await cmCloudClient.SolveAsync(turnstileRequest);
        Console.WriteLine("Solution: " + turnstileResult.Solution.Value);
    }
}
csharp
using System;
using System.Threading.Tasks;
using Zennolab.CapMonsterCloud;
using Zennolab.CapMonsterCloud.Requests;
class Program
{
    static async Task Main(string[] args)
    {
        var clientOptions = new ClientOptions { ClientKey = "YOUR_API_KEY" };
        var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
        // Cloudflare cf_clearance 只能使用自己的代理解决
        var turnstileRequest = new TurnstileRequest
        {
            WebsiteUrl = "https://yourwebsite.com/page-with-cf-challenge",
            WebsiteKey = "your-website-key",
            CloudflareTaskType = "cf_clearance",
            HtmlPageBase64 = "your_html_page_base64",
            UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36",
            Proxy = new ProxyContainer("123.45.67.89", 8080, ProxyType.Http, "username", "password")
        };
        var balance = await cmCloudClient.GetBalanceAsync();
        Console.WriteLine("Balance: " + balance);
        var turnstileResult = await cmCloudClient.SolveAsync(turnstileRequest);
        Console.WriteLine("Solution: " + turnstileResult.Solution.Clearance);
    }
}

对于低代码工作流程,请使用官方 CapMonster Cloud n8n 节点。

在您的请求中使用 cf_clearance cookie

text
GET https://example.com/protected-page
User-Agent: <userAgent from the task>
Cookie: cf_clearance=<value>
相同的代理同User-Agentcookie未过期

在原始 HTTP 请求的 Cookie: cf_clearance=<value> 标头中传递返回值,或在再次请求受保护的 URL 之前在浏览器上下文中设置它。在官方示例中,使用相同的代理和相同的User-Agent来加载页面、解决任务并使用cookie发送请求。

在 Selenium、Playwright 或 Puppeteer 中,在导航到受保护的 URL 之前,使用框架自己的方法设置 cookie — 然后浏览器会打开页面,而无需重复询问。如果您请求了 token,请将其传递给页面上的挑战 callback。

Background

Cloudflare Challenge 错误以及如何修复它们

大多数 Cloudflare Challenge 错误来自过期或不匹配的 cf_clearance cookie、服务不接受的代理或过时的页面参数。下面的每张卡片都列出了错误和修复方法。
Bug Icon

重复挑战或者解决后403

请求没有有效的 cf_clearance cookie、cookie 已过期或 Cloudflare 重新检查了会话 (Precursor clearance)。请求一个新的cookie。
Bug Icon

代理或 User-Agent 与任务不同

请求受保护页面时,请使用与任务中相同的代理和相同的 userAgent,如官方示例中所示。 Cloudflare 还指出,从与发布的 IP 不同的 IP 解析的 Managed Challenge 无效,并且可能导致质询循环 — 请参阅 Cloudflare 文档。
Bug Icon

过期的cookie

该 cookie 在有限时间内有效。长时间运行的脚本一旦过期就必须再次解决挑战。
Bug Icon

不接受代理

使用 http、https、socks4 或 socks5。
Bug Icon

过时的页面参数

有些值在挑战页面的每次渲染时都会发生变化。在创建任务之前立即提取它们。

关于Cloudflare Challenge的常见问题

什么是 Cloudflare Challenge?

Cloudflare Challenge 是当 WAF 规则、Bot Management 或速率限制认为请求可疑(例如,基于 TLS 指纹、IP 信誉或行为信号)时,Cloudflare 在授予对受保护页面的访问权限之前显示的中间检查。在检查过程中,访问者会看到中间的“请稍等……”页面。如果检查成功通过,Cloudflare 会发出一个 cf_clearance cookie——它与访问者和设备绑定,并且在有限时间内有效——之后浏览器就可以访问原始页面。

JS Challenge、Managed Challenge和闸机有什么区别?

所有这三个都依赖于来自浏览器的客户端信号。 JS Challenge(非交互式)在后台运行,通常不到五秒;如果没有通过,则Cloudflare显示另一个挑战页面。 Managed Challenge 允许 Cloudflare 从请求特征和浏览器信号中动态选择检查,直至交互步骤。 Turnstile 是一个可嵌入的小部件,它返回一个 token 以通过 Siteverify API 进行验证;通过可选的预许可,它还可以发出 cf_clearance cookie。

为什么我不断收到 Cloudflare、CAPTCHA、验证页面或 403 错误?

重复质询或 403 意味着该请求没有有效的 cf_clearance cookie、该 cookie 已过期,或者该请求来自与该 cookie 发出的访问者或设备不同的访问者或设备。即使有效的 cookie 也不能保证访问:Cloudflare 维护 Precursor clearance — 对会话行为的持续重新评估,可以降低或重置许可级别,并在流量模式开始看起来可疑时触发重复质询。

CapMonster Cloud如何解决Cloudflare Challenge?

CapMonster Cloud 通过两个 API 调用异步解决任务:使用任务参数的 createTask,然后轮询 getTaskResult,直到解决方案准备就绪。根据任务类型,服务返回 token(在没有代理的情况下插入到 callback 中)或 cf_clearance cookie(必须使用代理)。然后,您可以在常规 HTTP 请求的 Cookie: cf_clearance=<value> 标头中传递结果值,或者在浏览器上下文中设置它 - 之后受保护的页面将打开,而无需手动通过检查。

如何解决我的项目中的 Cloudflare Challenge 问题?

使用您的 clientKey(API 密钥)和任务参数向 createTask 发送 POST 请求,通过轮询 getTaskResult 等待结果准备就绪(直到状态为 ready),然后在 HTTP 客户端或浏览器中使用生成的 token 或 cookie自动化。对于现成的集成,请使用 GitHub 上的 CapMonster Cloud 存储库 中的官方 SDK — 它们将 createTask / getTaskResult 循环包装到单个调用中。

我需要代理来解决 Cloudflare 挑战吗?

仅对于返回 cf_clearance cookie 的任务,代理才是必需的。在官方示例中,相同的代理用于以下请求。对于 token 结果,不需要代理 - CapMonster Cloud 默认使用其内置代理(如果您按 IP 列入白名单,请添加 65.21.190.34)。支持型号:http、https、socks4、socks5;不允许透明代理和本地计算机上的代理。

我可以将 CapMonster Cloud 用作 Cloudflare Challenge 求解器与 n8n 或 Selenium 一起使用吗?

是的。对于 n8n,有一个官方 CapMonster Cloud 节点 - 从界面安装或通过自托管实例上的 npm install @zennolab_com/n8n-nodes-capmonstercloud 安装。在其他情况下,您的代码首先向 CapMonster API 发出常规 HTTP 请求(通过 requests、axios 或任何其他 HTTP 客户端),然后使用其自己的方法将结果传递到浏览器框架(Selenium、Playwright、Puppeteer 等)。在导航到受保护的 URL 之前,需要使用此方法设置 cf_clearance cookie — 然后浏览器将通过已经有效的检查打开页面,而无需重复质询。

自动解决 Cloudflare 挑战是否合法?

解决Cloudflare Challenge是一项技术操作,其合法性取决于所产生的访问如何使用,而不是工具本身。 CapMonster Cloud 适用于法律自动化——测试、监控和收集公开可用的数据——而遵守法律和目标资源的使用条款的责任由用户承担。

CapMonster Cloud

我们不保证 100% 的成功率:CAPTCHA 类型和目标站点配置可能随时更改。实际解决速度和成功率取决于目标站点、服务器负载和网络状况。

Cloudflare 是 Cloudflare, Inc. 的商标。CapMonster Cloud 不隶属于 Cloudflare,也不受其认可。该服务旨在用于公开数据、测试您自己或授权的网站、图像识别和可访问性。未经许可,禁止通过登录或付费专区收集第三方数据;您自己的帐户不受影响。您在开始工作之前确定数据的法律状态。