Как решить MTCaptcha
Поле выше работает как живая MTCaptcha (виджет). Эта страница показывает два способа решить MTCaptcha и получить подтверждённый токен v1: вызывая HTTP API CapSkip из собственного кода или направив сервис капчи, к которому уже обращаются ваши инструменты, в CapSkip. CapSkip работает как безлимитный сервис распознавания MTCaptcha локально на вашем устройстве, поэтому нет платы за каждое решение и ничего не покидает вашу машину.
Вариант 1: решение MTCaptcha с помощью HTTP API CapSkip
Создаёте автоматизацию, парсер или бота? Отправьте site key MTPublic и URL этой страницы в приложение CapSkip одним запросом, опрашивайте результат, и CapSkip вернёт подтверждённый токен MTCaptcha, который можно отправить как настоящий. API использует стандартные in.php / res.php эндпоинты, поэтому работает из Python, Node.js, PHP, C# или любого другого языка, который умеет выполнять HTTP-запросы.
MTPublic-C8YHBQqYE
https://capskip.com/ru/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/ru/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/ru/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/ru/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/ru/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Вы получаете подтверждённый токен, который начинается с v1(, действителен для этого site key и этой страницы и готов к отправке. Он срабатывает один раз и только в течение нескольких минут, поэтому запрашивайте его прямо перед отправкой формы.
Используйте токен
Поместите токен в скрытое поле виджета mtcaptcha-verifiedtoken и отправьте форму. Затем ваш сервер проверяет его вызовом MTCaptcha checktoken со своим закрытым ключом. Обратите внимание, что это демо проверяет токен через собственный callback виджета, поэтому оно проверяет токен, созданный виджетом, а не тот, который вы помещаете в поле.
// 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 и действия страницы
В невидимом режиме (low-friction) большинство посетителей вообще не видят картинку, и MTCaptcha показывает её, только когда визит выглядит подозрительным. Тот же запрос покрывает и этот случай, а если картинка всё же запрошена, CapSkip её решает. Если mtcaptchaConfig страницы задаёт action, отправьте его вместе с задачей, поскольку токен привязан к нему.
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 для виджетов low-friction.
Полный список параметров запроса, полей ответа и кодов ошибок находится в Документация по API CapSkip.
Вариант 2: направьте существующий код сервиса-решателя в CapSkip
Уже решаете MTCaptcha через сервис с оплатой за капчу, такой как 2Captcha, CapMonster Cloud или CapSolver? Вам не нужно переписывать ни строки. Приложение CapSkip включает эмулятор сервиса который локально говорит на собственных API этих сервисов: выберите используемый сервис, нажмите Добавить в файл hosts, и на каждый запрос, который ваш бот, парсер или готовый инструмент уже отправляет ему, отвечает CapSkip на вашей собственной машине, по фиксированной цене вместо счёта за каждое решение.
Выберите свой сервис
Откройте приложение CapSkip и выберите сервис, с которым уже работает ваш код: 2Captcha, RuCaptcha, SolveCaptcha, CapMonster Cloud, CapSolver или DeathByCaptcha.
Добавить в файл hosts
Один клик в приложении направляет домен этого сервиса на CapSkip, поэтому вызовы, которые делает ваш инструмент, обрабатываются на вашей машине, а не уходят к платному API.
Запускайте свой инструмент без изменений
Тот же API-ключ, тот же запрос, тот же цикл опроса. CapSkip отвечает в собственном формате этого сервиса, и ваш код получает обратно подтверждённый токен MTCaptcha.
Ничего из приведённого ниже не меняется при переходе. Это тот же вызов, который ваш код делает сегодня, только теперь MTCaptcha решается локально, и подтверждённый токен возвращается из CapSkip:
POST https://2captcha.com/in.php
key=YOUR_EXISTING_API_KEY
method=mt_captcha
sitekey=MTPublic-C8YHBQqYE
pageurl=https://capskip.com/ru/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 type 18 или любая обёртка, построенная на одном из этих сервисов, продолжают работать, как только включён эмулятор. Полный справочник по запросам и ответам находится в Документация по API CapSkip.
Подробнее о решении MTCaptcha
Руководства по инструментам и языкам, которые обычно используют вместе с этой демонстрацией.
Об этом демо MTCaptcha
Эта страница работает как живая демо MTCaptcha , где вы можете проверить, как работает MTCaptcha, и увидеть её решение в реальном времени. MTCaptcha представляет собой капчу с упором на конфиденциальность: она показывает короткую строку искажённых символов, частично перекрытую цветным эллипсом, поле для их ввода и кнопки для аудио и новой картинки. Сайты, которым нужно меньше трения, включают её невидимый режим: он пропускает большинство посетителей и показывает картинку только тем, в ком сомневается. Используйте её, чтобы изучить генерацию токена MTCaptcha, mtcaptcha-verifiedtoken значение, а также проверку через checktoken, на которую сайты полагаются для защиты форм, входов и регистраций от спама, злоупотреблений и ботов.
Разработчики, тестировщики и инженеры по автоматизации могут использовать эту тестовую страницу MTCaptcha, чтобы проверить интеграции, подтвердить настройку и оценить, насколько быстро CapSkip решает MTCaptcha. Нужно ли вам решить MTCaptcha один раз или автоматизировать тысячи решений, CapSkip работает двумя способами: простой HTTP API, который можно вызывать из любого языка, и готовая эмуляция сервисов распознавания капчи, за которые вы, возможно, сегодня платите за каждое решение, и всё это с безлимитным решением по единой фиксированной цене. Оба способа работают на одном и том же десктопном AI распознавание капчи, устанавливается один раз и работает на вашей машине, поэтому ничто не ставится в очередь на удалённом сервере и ничто не тарифицируется за каждое решение. Загляните на страницу сервиса распознавания MTCaptcha , чтобы увидеть полную картину.
