如何识别 MTCaptcha
上方的方框是一个实时的 MTCaptcha 小组件。本页面展示两种方式来识别 MTCaptcha 并获取已验证的 v1 token:通过在你自己的代码中调用 CapSkip HTTP API,或将你的工具已经调用的验证码服务重新路由到 CapSkip。CapSkip 是一款无限量的 MTCaptcha 识别工具,在你的设备上本地运行,因此没有按次费用,也没有任何数据离开你的机器。
方式一:使用 CapSkip HTTP API 识别 MTCaptcha
在构建自动化、爬虫或机器人?只需一个请求,把本页面的 MTPublic site key 和 URL 发送给 CapSkip 应用,轮询结果,CapSkip 就会返回一个已验证的 MTCaptcha token,你可以像真实 token 一样提交它。该 API 使用标准的 in.php / res.php 端点,因此可以在 Python, Node.js, PHP, C# 或任何能发起 HTTP 调用的其他语言中使用。
MTPublic-C8YHBQqYE
https://capskip.com/zh/captcha-demo/mtcaptcha/
开始之前
CapSkip 在本地识别。下载并运行 CapSkip 桌面应用 并让它在后台保持打开。你的代码通过 127.0.0.1:8080与它通信,因此没有云端调用,也没有按次费用。
将 MTCaptcha 发送到 CapSkip
提交本页面的 sitekey 和 pageurl 设置为 in.php 连同 method=mt_captcha。CapSkip 会立即返回一个任务 ID。
import time
import requests
API = "http://127.0.0.1:8080" # the CapSkip app on your machine
KEY = "YOUR_API_KEY"
# 1. Submit the MTCaptcha shown on this page
task = requests.post(f"{API}/in.php", data={
"key": KEY,
"method": "mt_captcha",
"sitekey": "MTPublic-C8YHBQqYE",
"pageurl": "https://capskip.com/zh/captcha-demo/mtcaptcha/",
"json": 1,
}).json()["request"]
# 2. Poll until the token is ready
while True:
time.sleep(3)
res = requests.get(f"{API}/res.php", params={
"key": KEY, "action": "get", "id": task, "json": 1,
}).json()
if res["request"] != "CAPCHA_NOT_READY":
break
token = res["request"] # the v1(...) verified token
print(token)const API = 'http://127.0.0.1:8080'; // the CapSkip app on your machine
const KEY = 'YOUR_API_KEY';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
(async () => {
// 1. Submit the MTCaptcha shown on this page
const submit = await fetch(`${API}/in.php`, {
method: 'POST',
body: new URLSearchParams({
key: KEY,
method: 'mt_captcha',
sitekey: 'MTPublic-C8YHBQqYE',
pageurl: 'https://capskip.com/zh/captcha-demo/mtcaptcha/',
json: '1',
}),
}).then((r) => r.json());
// 2. Poll until the token is ready
let res;
do {
await sleep(3000);
res = await fetch(`${API}/res.php?key=${KEY}&action=get&id=${submit.request}&json=1`)
.then((r) => r.json());
} while (res.request === 'CAPCHA_NOT_READY');
const token = res.request; // the v1(...) verified token
console.log(token);
})();<?php
$api = 'http://127.0.0.1:8080'; // the CapSkip app on your machine
$key = 'YOUR_API_KEY';
// 1. Submit the MTCaptcha shown on this page
$ch = curl_init("$api/in.php");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => http_build_query([
'key' => $key,
'method' => 'mt_captcha',
'sitekey' => 'MTPublic-C8YHBQqYE',
'pageurl' => 'https://capskip.com/zh/captcha-demo/mtcaptcha/',
'json' => 1,
]),
]);
$task = json_decode(curl_exec($ch), true)['request'];
// 2. Poll until the token is ready
do {
sleep(3);
$res = json_decode(file_get_contents(
"$api/res.php?key=$key&action=get&id=$task&json=1"
), true);
} while ($res['request'] === 'CAPCHA_NOT_READY');
$token = $res['request']; // the v1(...) verified token
echo $token;using System.Text.Json;
const string Api = "http://127.0.0.1:8080"; // the CapSkip app on your machine
const string Key = "YOUR_API_KEY";
var http = new HttpClient();
// 1. Submit the MTCaptcha shown on this page
var submit = await http.PostAsync($"{Api}/in.php", new FormUrlEncodedContent(new Dictionary<string, string>
{
["key"] = Key,
["method"] = "mt_captcha",
["sitekey"] = "MTPublic-C8YHBQqYE",
["pageurl"] = "https://capskip.com/zh/captcha-demo/mtcaptcha/",
["json"] = "1",
}));
string task = JsonDocument.Parse(await submit.Content.ReadAsStringAsync())
.RootElement.GetProperty("request").GetString()!;
// 2. Poll until the token is ready
string token;
do
{
await Task.Delay(3000);
var res = JsonDocument.Parse(await http.GetStringAsync(
$"{Api}/res.php?key={Key}&action=get&id={task}&json=1"));
token = res.RootElement.GetProperty("request").GetString()!;
} while (token == "CAPCHA_NOT_READY");
Console.WriteLine(token); // the v1(...) verified token你会得到一个已验证的 token,它以 v1(开头,对该 site key 和本页面有效,可直接提交。它只能使用一次,且只在几分钟内有效,因此请在发送表单前一刻再请求。
使用 token
将 token 放入小组件隐藏的 mtcaptcha-verifiedtoken 字段并提交表单。随后你的服务器会通过 MTCaptcha 的 checktoken 调用并使用其私钥对它进行验证。请注意,本演示通过小组件自身的回调进行验证,因此它检查的是小组件生成的 token,而不是你放入字段中的 token。
// 1. Drop the solved token into the hidden field the widget submits
document.querySelector('[name="mtcaptcha-verifiedtoken"]').value = token;
// 2. ...then submit your form.隐形 MTCaptcha 与页面 action
在隐形(低干扰)模式下,大多数访问者根本看不到图片,MTCaptcha 只在访问看起来可疑时才显示图片。同一个请求同样适用,如果要求作答图片,CapSkip 也会作答。如果页面的 mtcaptchaConfig 设置了 action,请随任务一起发送,因为 token 与它绑定。
POST http://127.0.0.1:8080/in.php
key=YOUR_API_KEY
method=mt_captcha
sitekey=MTPublic-SITEKEY_FROM_THE_PAGE
pageurl=https://the-protected-site.com/login
action=login
json=1
GET http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=2122988149&json=1
{"status":1,"request":"v1(2f7e3c1a,b7c6…)"}该 API 还接受 proxy 和 proxytype,可将稳定的请求量分散到多个地址上。JSON 客户端也可以通过 createTask 发送同一任务,类型为 MTCaptchaTask 或 MtCaptchaTaskProxyless,并附带 isInvisible (用于低干扰小组件)。
完整的请求参数、响应字段和错误代码列表见 CapSkip API 文档.
方式二:将你现有的识别服务代码发送到 CapSkip
遇到 MTCaptcha 时,已经在通过按次付费的验证码服务(例如 2Captcha, CapMonster Cloud 或 CapSolver)识别验证码?你无需重写一行代码。CapSkip 应用包含一个 服务模拟器 ,它在本地模拟这些服务自己的 API:选择你使用的服务,点击 添加到 hosts 文件,你的机器人、爬虫或现成工具已经发送给它的每个请求,都会由 CapSkip 在你自己的机器上响应,采用统一价格而非按次账单。
选择你的服务
打开 CapSkip 应用,选择你的代码已经在对接的服务:2Captcha、RuCaptcha、SolveCaptcha、CapMonster Cloud、CapSolver 或 DeathByCaptcha。
添加到 hosts 文件
在应用中一键将该服务的域名指向 CapSkip,于是你的工具发出的调用会在你自己的机器上得到响应,而不是发往付费 API。
原样运行你的工具
相同的 API key、相同的请求、相同的轮询循环。CapSkip 以该服务自身的格式回复,你的代码会得到一个已验证的 MTCaptcha token。
切换后,下面的内容不会有任何变化。这与你的代码今天发出的调用完全相同,只不过现在 MTCaptcha 在本地识别,并且一个已验证的 token 会从 CapSkip 返回:
POST https://2captcha.com/in.php
key=YOUR_EXISTING_API_KEY
method=mt_captcha
sitekey=MTPublic-C8YHBQqYE
pageurl=https://capskip.com/zh/captcha-demo/mtcaptcha/
GET https://2captcha.com/res.php?key=YOUR_EXISTING_API_KEY&action=get&id=2122988149
OK|v1(2f7e3c1a,b7c6…) the verified token, solved by CapSkip客户端库同样如此: createTask / getTaskResult 组合搭配 MTCaptchaTask、DeathByCaptcha 类型 18,或任何基于这些服务构建的封装,在模拟器开启后都能继续工作。完整的请求和响应参考见 CapSkip API 文档.
关于识别 MTCaptcha 的更多内容
针对人们通常与此演示搭配使用的工具和语言的指南。
关于本 MTCaptcha 演示
本页是一个实时的 MTCaptcha 演示 ,在这里你可以测试 MTCaptcha 的工作原理,并实时观看它被识别的过程。MTCaptcha 是一款注重隐私的验证码,它会显示一行简短的变形字符,部分被一个彩色椭圆遮挡,并配有一个用于输入的方框,以及音频和换一张图片的按钮。希望减少干扰的网站会开启它的隐形模式:大多数访问者可以直接通过,只有它有所怀疑的访问者才会看到图片。用它来探索 MTCaptcha token 的生成、 mtcaptcha-verifiedtoken 值,以及网站用来保护表单、登录和注册免受垃圾信息、滥用和机器人侵害的 checktoken 验证流程。
开发者、测试人员和自动化工程师可以使用这个 MTCaptcha 测试页面来检查集成、验证配置,并对 CapSkip 识别 MTCaptcha 的速度进行基准测试。无论你需要识别一次 MTCaptcha 还是自动化数千次识别,CapSkip 都有两种工作方式:可从任何语言调用的普通 HTTP API,以及对你今天可能按次付费的验证码服务的即插即用模拟,两者都以统一价格无限量识别。两者都由同一个桌面 AI 验证码识别工具驱动,安装一次即可在你自己的机器上运行,因此没有任何内容在远程服务器排队,也没有任何按次计费。参见 MTCaptcha 识别工具 页面,了解完整介绍。
