MTCaptcha
和 CapMonster Cloud

验证码解决方案,网站安装与测试。

MTCaptcha解决方案的定价

验证码
价格 (USD)
$ 1.50
1000 代币
接手一个已经部署 captcha 或其他防护的站点,却无法访问源代码?此时最关心的是使用了哪种方案、配置是否正确以及如何测试。

在本文中,我们尽量回答了所有关键问题。要开始解决问题,第一步是确定当前使用的是哪种防护系统。为此,您可以查看常见验证码与反机器人防护系统列表,其中提供了可视化示例和关键特征,帮助您快速判断自己正在使用哪一种方案。

如果您发现自己的网站使用的是 MTCaptcha,下一步就是更深入地了解它的特性和具体工作方式。在本文中,您还可以查看 MTCaptcha 的接入说明,以便彻底弄清它在您的网站上是如何运行的。这样一来,您不仅能更好地理解当前的防护机制,还可以更合理地规划后续的维护和支持。

什么是 MTCaptcha
什么是 MTCaptcha
MTCaptcha 是一种保护网站免受自动化操作的系统,使用智能验证和验证码。 首先,服务在后台分析流量。如果访问者的行为可疑,系统会自动显示文本验证码进行额外验证。

通过 CapMonster Cloud 解决 MTCaptcha

测试包含 MTCaptcha 的表单时,常常需要确认 captcha 是否集成正确并工作正常。

你可以手动验证站点上的 captcha。

  • 打开表单页面,确认 captcha 能够显示。
  • 尝试在不解题的情况下提交——服务器应返回错误。
  • 解题成功后,表单应顺利提交。

若想自动解题,可以使用 CapMonster Cloud 等服务,它会接收验证码参数、在服务器中解析并返回可直接使用的 token。把 token 注入表单即可无需人工操作通过验证。

通过 CapMonster Cloud API 工作的一般流程:

创建任务创建任务
arrow
发送 API 请求发送 API 请求
arrow
获取结果获取结果
arrow
将 token 应用到页面将 token 应用到页面
arrow
使用现成库识别 MTCaptcha
CapMonster Cloud 服务提供适用于 PythonJavaScript(Node.js)和 C# 的现成库,方便使用。
Python
JavaScript
C#
解决、插入令牌并提交表单
Node.js 示例,展示在网页上完整的验证码识别流程。可能的方式:使用 HTTP 请求获取 HTML 和验证码参数,提交答案并处理结果;或者使用自动化工具(如 Playwright)——打开页面、等待验证码、提交参数(测试时可以提交正确或错误数据)、通过 CapMonster Cloud 客户端获取结果、将令牌填入表单并查看结果。

  // npm install playwright @zennolab_com/capmonstercloud-client
import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, MTCaptchaRequest } from '@zennolab_com/capmonstercloud-client';

const API_KEY = 'YOUR_API_KEY';
const TARGET_URL = 'https://example.com';

async function main() {
  const browser = await chromium.launch({ headless: false });
  const context = await browser.newContext();
  const page = await context.newPage();

 
  let websiteKey = null;
  page.on('request', request => {
    const url = request.url();
    if (url.startsWith('https://service.mtcaptcha.com/mtcv1/api/getchallenge.json')) {
      const params = new URL(url).searchParams;
      const sk = params.get('sk');
      if (sk) {
        websiteKey = sk;
        console.log('Extracted websiteKey (sk):', websiteKey);
      }
    }
  });

  
  await page.goto(TARGET_URL, { waitUntil: 'networkidle' });

  if (!websiteKey) {
    console.error('Failed to extract websiteKey (sk) from the page');
    await browser.close();
    return;
  }

  
  const client = CapMonsterCloudClientFactory.Create(
    new ClientOptions({ clientKey: API_KEY })
  );

  
  const mtcaptchaRequest = new MTCaptchaRequest({
    websiteURL: TARGET_URL,
    websiteKey: websiteKey,
    isInvisible: false,
    pageAction: 'login'
  });

  // 验证码解决
  const result = await client.Solve(mtcaptchaRequest);

  
  const verifiedToken = typeof result?.solution?.value === 'string'
    ? result.solution.value
    : JSON.stringify(result.solution.token);

  console.log('VerifiedToken:', verifiedToken);

  
  // 插入令牌并提交表单(替换为正确选择器)
  await page.evaluate((token) => {
    const input = document.querySelector('#mtcaptcha-verifiedtoken-1');
    if (input) input.value = token;
  }, verifiedToken);

  console.log('Token inserted into input');

  
  // await page.click('button[type="submit"]');

  await page.waitForTimeout(5000);

  await browser.close();
}

main().catch(err => {
  console.error('An error occurred:', err);
});
如何将 MTCaptcha 连接到您的网站
为了清楚了解网站上的验证码工作原理、理解验证逻辑、重新连接或重新配置,建议阅读此部分。它描述了保护连接过程 — 帮助快速掌握所有细节。

1. 注册或 登录 您的 MTCaptcha 账户。

2. 注册后添加您的网站。您将获得两个密钥。

  • Site Key — 前端使用的公钥,用于显示小部件。
  • Private Key — 服务器使用的私钥,用于验证验证码解决方案。仅在服务器端存储,不要发送给客户端。

示例:

HowTo Connect image 1

3. 配置 MTCaptcha 客户端:

将代码插入页面 <head> 部分。

<YOUR SITE KEY> 替换为您在 MTCaptcha 控制面板获得的 Site Key


  <head>
  <script>
    var mtcaptchaConfig = {
      sitekey: "<YOUR SITE KEY>"
    };
  
    (function() {
      var mt_service = document.createElement('script');
      mt_service.async = true;
      mt_service.src = 'https://service.mtcaptcha.com/mtcv1/client/mtcaptcha.min.js';
      (document.head || document.body).appendChild(mt_service);
  
      var mt_service2 = document.createElement('script');
      mt_service2.async = true;
      mt_service2.src = 'https://service2.mtcaptcha.com/mtcv1/client/mtcaptcha2.min.js';
      (document.head || document.body).appendChild(mt_service2);
    })();
  </script>
</head>


<body> 中添加验证码容器

在您希望显示验证码的位置(例如表单内部):

<div class="mtcaptcha"></div>

小部件会自动加载。

HelpIcon

您可以使用 现成的 SDK 和插件进行快速集成:

  • Server-side SDKs: Java, Node.js, PHP
  • Client-side SDKs: React, React Native, Vue
  • CMS 插件: WordPress, Drupal

MTCaptcha 还提供 演示页面,可在将保护功能接入网站前进行测试和配置。

4. 服务器端操作。获取客户端 Verified-Token。

通过表单隐藏字段:

<input type="hidden" name="mtcaptcha-verifiedtoken" />

或通过 JS:

mtcaptcha.getVerifiedToken() / mtcaptchaVerifiedCallback(status)

将令牌与表单或请求一起发送到服务器。

通过 API 验证令牌(服务器验证):

GET https://service.mtcaptcha.com/mtcv1/api/checktoken?privatekey=<PRIVATE_KEY>&token=<TOKEN>
  • privatekey — 您的私钥(仅服务器)
  • token — 来自客户端的令牌

防火墙服务器的备用 URL:

https://service2.mtcaptcha.com/mtcv1/api/checktoken

处理响应:

success: true → 验证码通过,继续处理。

示例示例
arrow

success: false → 错误(令牌过期、重复使用等)

HelpIcon
每个 verifiedToken 有效几分钟,并且只能通过 CheckToken API 验证一次,以防止重复使用。接收到令牌后,服务器必须及时验证 — MTCaptcha 小部件保证至少 50 秒用于验证。

使用 Node.js 模块的简单示例使用 Node.js 模块的简单示例
arrow

HelpIcon

若要详细了解 MTCaptcha 功能 — 小部件自定义、客户端和服务器配置、与框架集成及其他功能 — 请参考 官方文档

Background
可能的错误与调试
Bug Icon
网站或密钥无效
验证码无法加载或服务器返回 invalid-privatekeyprivatekey-mismatch-token。请确保使用正确的 sitekeyprivatekey
Bug Icon
令牌缺失或无效
错误 missing-input-tokeninvalid-tokenbad-request。请检查令牌值是否正确传递到服务器且未被修改。
Bug Icon
令牌过期 (token-expired)
令牌有效时间有限(通常约 120 秒),之后需要重新获取。
Bug Icon
令牌重复验证 (token-duplicate-cal)
令牌只能验证一次 — 防止重放攻击。
Bug Icon
密钥过期或被禁用 (expired-sitekey-or-account)
请确保密钥有效且账户活跃。
Bug Icon
为诊断错误原因,请启用请求日志并显示 fail_codes。
验证防护的可靠性
安全与优化建议
<span class="font-bold">privatekey 仅保存在服务器上</span>,不要传递给客户端。
记录 <span class="font-bold">fail_codes</span> 以追踪错误原因并分析绕过防护的尝试。
如果平台政策要求,请在表单中放置指向<span class="font-bold">隐私政策</span>和<span class="font-bold">使用条款</span>的链接。
结论

如果你接手了一个已经集成了验证码或其他防护系统的网站,但又无法访问其代码,也不用担心!要判断实际使用了哪种技术其实并不难。为了核实其是否正常工作,你可以在隔离的测试环境中使用CapMonster Cloud识别服务,确保令牌处理机制和校验逻辑都运行正常。

对于MTCaptcha,只需识别出所用的系统,观察其行为,并确认防护是否正常工作即可。本文演示了如何识别 MTCaptcha,以及到哪里查找其接入或重新配置的说明文档,从而帮助你自信地维护防护方案并掌控其运行情况。

Conclusion

关于 MTCaptcha 的常见问题

如果 sitekey(sk)在页面 HTML 或 JavaScript 中不可见,请检查网络请求以找到它:

  1. 打开 DevTools → Network。
  2. 触发 CAPTCHA 并按 getchallenge.json 筛选请求。
  3. 从 URL 复制 sk 查询参数。

用于自动化(例如 Playwright):以编程方式拦截相同请求,从 URL 字符串解析 sk,并将其直接映射到 CapMonster Cloud MTCaptchaTask 负载中的 websiteKey 字段。

MTCaptchaTask 中的 pageAction 必须与网站 getchallenge.json 网络请求中找到的 act 值(与 sk 参数一起)严格匹配。此匹配区分大小写并包含特殊字符。如果网站使用默认值 %24,请完全省略请求中的 pageAction阅读更多

verifiedToken 在后端验证之前过期时会发生这种情况。MTCaptcha 令牌默认仅有效 60–120 秒。可靠的解决方案是在提交表单之前立即在 CapMonster Cloud 中启动任务,而不是在会话开始时。

仅当 MTCaptcha 小部件以隐形模式运行时才设置 isInvisible: true。此类模式的标志:

  • 页面加载时不显示复选框或可见验证码元素。
  • 仅在检测到可疑或类似机器人的行为时才出现额外挑战。

如果页面显示标准可见的 MTCaptcha 小部件,可以在请求中省略 isInvisible 标志。

传递错误的布尔值将因求解器逻辑不匹配而生成无效令牌。

您可以通过手动注入来自 CapMonster Cloud API 的已解决令牌来实现:

  1. 使用 Postman、脚本或其他 HTTP 客户端从 CapMonster Cloud API 请求解决方案,传递 skact 参数。
  2. 复制 API 响应中返回的 solution.token
  3. 在目标页面上打开 DevTools 并找到隐藏字段 <input name="mtcaptcha-verifiedtoken">
  4. 将令牌粘贴到字段的 value 属性中并提交表单以确认验证。

或者,您可以检查页面的网络流量以确定用于服务器端验证的确切端点,然后发送包含已解决令牌的直接 HTTP 请求。