Документация по API
Справочник по доступным endpoints, форматам запросов, параметрам и примерам ответов для интеграции API в ваши приложения.
Эта документация предназначена для разработчиков, которые хотят интегрировать CapSkip напрямую в собственные скрипты, приложения или системы автоматизации. Пользователям стороннего ПО следует обращаться к разделу «Учебники» за инструкциями по настройке.
CapSkip эмулирует API популярных сервисов распознавания капчи, что позволяет ему подключаться к совместимому стороннему ПО без каких-либо модификаций. Для интеграции обычно достаточно просто запустить CapSkip.
В документации описано, как отправлять запросы и получать результаты. CapSkip поддерживает несколько семейств API, включая API в стиле 2Captcha (in.php / res.php), JSON-API createTask / getTaskResult, используемый в AntiCaptcha, CapMonster и CapSolver, а также REST API DeathByCaptcha. Сервисы одного семейства используют одни и те же endpoints, формат запроса и ответа. Различается только базовый URL (хост и порт) для каждого сервиса.
| Семейство API | Сервисы |
|---|---|
| в стиле 2captcha | 2captcha.com, rucaptcha.com, solvecaptcha.com, captchas.io |
| JSON (createTask / getTaskResult) | anti-captcha.com, capmonster.cloud, capsolver.com |
| DeathByCaptcha | deathbycaptcha.com |
Графическая капча
Обычная капча — это изображение с искажённым, но читаемым для человека текстом. Чтобы решить её, пользователь должен ввести текст, показанный на изображении.
Чтобы решить обычную капчу, отправьте изображение HTTP POST-запросом на endpoint API. Отправляйте запрос напрямую в ваш экземпляр CapSkip, используя настроенный локальный адрес и порт, например: http://127.0.0.1:PORT/in.php
CapSkip принимает изображения в формате multipart/form-data или в кодировке Base64.
Пример multipart-формы
<form method="post" action="http://127.0.0.1:PORT/in.php" enctype="multipart/form-data"> <input type="hidden" name="method" value="post"> Your key: <input type="text" name="key" value="YOUR_APIKEY"> The CAPTCHA file: <input type="file" name="file"> <input type="submit" value="Upload and get the ID"> </form>
YOUR_APIKEY представляет ваш API-ключ, если в CapSkip включена проверка API-ключа. Если проверка API-ключа отключена, будет принято любое строковое значение.
Пример формы с Base64
<form method="post" action="http://127.0.0.1:PORT/in.php"> <input type="hidden" name="method" value="base64"> Your key: <input type="text" name="key" value="YOUR_APIKEY"> The CAPTCHA file body in base64 format: <textarea name="body">BASE64_FILE</textarea> <input type="submit" value="Upload and get the ID"> </form>
YOUR_APIKEY представляет ваш API-ключ, если в CapSkip включена проверка API-ключа. Если проверка API-ключа отключена, будет принято любое строковое значение.
BASE64_FILE — это данные изображения в кодировке Base64.
Список параметров POST-запроса
| Параметр POST | Тип | Обязательно | Описание |
|---|---|---|---|
| key | Строка | Да | Ваш API-ключ CapSkip. |
| method | Строка | Да |
post – отправить изображение с помощью multipart/form-data base64 – отправьте изображение в виде строки в кодировке Base64 |
| file | Файл | Да* |
Файл изображения капчи. * Обязательно, когда method=post. |
| body | Строка | Да* |
Данные изображения капчи в кодировке Base64. * Обязательно, когда method=base64. |
| json | Целое число По умолчанию: 0 | Нет |
0 – ответ возвращается в виде обычного текста 1 – ответ возвращается в формате JSON |
Отправка капчи (multipart-загрузка файла):
curl -X POST -F "key=YOUR_API_KEY" -F "method=post" -F "[email protected]" http://127.0.0.1:8080/in.php
Отправить капчу (в кодировке base64):
curl -X POST -d "key=YOUR_API_KEY&method=base64&body=BASE64_IMAGE_DATA" http://127.0.0.1:8080/in.php
После отправки запроса, если всё верно, CapSkip вернёт CAPTCHA ID в виде обычного текста: OK|12345
Если json=1 параметр используется, ответ будет возвращён в формате JSON:
{
"status":1,
"request":"12345"
}Подождите 1 секунду, затем отправьте HTTP GET-запрос на эндпоинт результата (/res.php) с полученным ID капчи.
Если капча решена, CapSkip вернёт результат в виде обычного текста: OK|TEXT
Если json=1 был указан, ответ будет:
{
"status":1,
"request":"TEXT"
}Если капча ещё не решена, CapSkip вернёт: CAPCHA_NOT_READY
В этом случае подождите 1 секунду и повторяйте запрос, пока не будет получен окончательный результат. Если CapSkip возвращает пустое тело ответа, значит результат уже был получен или ID не существует. Каждый результат можно прочитать только один раз.
Список параметров GET-запроса
| Параметр GET | Тип | Обязательно | Описание |
|---|---|---|---|
| key | Строка | Да | Ваш API-ключ CapSkip. |
| action | Строка | Да | get – получить ответ для отправленной капчи. |
| id | Целое число | Да |
Идентификатор CAPTCHA, возвращаемый in.php. |
| json | Целое число По умолчанию: 0 | Нет |
0 – ответ возвращается в виде обычного текста 1 – ответ возвращается в формате JSON |
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=CAPTCHA_ID"
reCAPTCHA V2
reCAPTCHA v2, также известная как reCAPTCHA “Я не робот”, — это широко используемый тип капчи, который выглядит следующим образом:
Чтобы решить reCAPTCHA v2, отправьте googlekey и pageurl параметры вместе с method=userrecaptcha и ваш ключ API CapSkip.
Вы можете получить googlekey одним из следующих способов:
Щёлкните правой кнопкой мыши по виджету reCAPTCHA и выберите Проверить. Найдите URL, который начинается с:
www.google.com/recaptcha/api2/anchor
Скопируйте значение k параметр из этого URL. Либо найдите data-sitekey атрибут в исходном коде страницы и скопируйте его значение.

Получив site key, отправьте HTTP-запрос GET или POST на http://127.0.0.1:PORT/in.php
Список параметров POST-запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| key | Строка | Да | Ваш API-ключ CapSkip. |
| method | Строка | Да | userrecaptcha – указывает на запрос reCAPTCHA v2. |
| googlekey | Строка | Да | Значение k или data-sitekey параметр, найденный на целевой странице. |
| pageurl | Строка | Да | Полный URL страницы, на которой расположена reCAPTCHA. |
| enterprise | Целое число По умолчанию: 0 | Нет |
1 – указывает на reCAPTCHA Enterprise v2. 0 – стандартная reCAPTCHA v2. |
| invisible | Целое число По умолчанию: 0 | Нет |
1 – означает Invisible reCAPTCHA. 0 – стандартная reCAPTCHA с флажком. |
| data-s | Строка | Нет | Значение data-s параметр, найденный на странице. Применимо к Google Search и некоторым сервисам Google. |
| json | Целое число По умолчанию: 0 | Нет |
0 – ответ возвращается в виде обычного текста. 1 – ответ возвращается в формате JSON. |
| proxy | Строка | Нет | Адрес прокси. Формат для аутентификации по IP: IP:PORT (пример: 123.123.123.123:3128). Формат для аутентификации по логину/паролю: login:password@IP:PORT |
| proxytype | Строка | Нет | Тип прокси. Поддерживаемые значения: HTTP, HTTPS, SOCKS5, SOCKS5H. По умолчанию: HTTP когда proxy предоставлен, но proxytype опущен. |
Отправка reCAPTCHA v2 (стандартная):
curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com" http://127.0.0.1:8080/in.php
Отправка reCAPTCHA v2 (Invisible):
curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&invisible=1" http://127.0.0.1:8080/in.php
Отправка Enterprise reCAPTCHA v2:
curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&enterprise=1" http://127.0.0.1:8080/in.php
Отправка Enterprise reCAPTCHA v2 (Invisible):
curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&enterprise=1&invisible=1" http://127.0.0.1:8080/in.php
Если запрос успешен, CapSkip вернёт ID капчи в виде простого текста: OK|12345
Если json=1 параметр был использован, ответ будет возвращён в формате JSON:
{
"status":1,
"request":"12345"
}Если запрос не удался, CapSkip вернёт код ошибки.
Подождите от 15 до 20 секунд, затем отправьте HTTP GET-запрос на endpoint результата, чтобы получить решение: http://127.0.0.1:PORT/res.php
Список параметров GET-запроса
| Параметр GET | Тип | Обязательно | Описание |
|---|---|---|---|
| key | Строка | Да | Ваш API-ключ CapSkip. |
| action | Строка | Да | get – получить ответ для отправленной капчи. |
| id | Целое число | Да |
Идентификатор CAPTCHA, возвращаемый in.php. |
| json | Целое число По умолчанию: 0 | Нет |
0 – ответ возвращается в виде обычного текста 1 – ответ возвращается в формате JSON |
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=CAPTCHA_ID"
Если капча решена, CapSkip ответит в виде обычного текста или JSON и вернёт токен-ответ. Токен будет выглядеть примерно так:
03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq-uBO5mVm2XRikL8iKOWr0aG50sCuej9bXx5qcviUGSm4iK4NC_Q88flavWhaTXSh0VxoihBwBjXxwXuJZ-WGN5Sy4dtUl2wbpMqAj8Zwup1vyCaQJWFvRjYGWJ_TQBKTXNB5CCOgncqLetmJ6B6Cos7qoQyaB8ZzBOTGf5KSP6e-K9niYs772f53Oof6aJeSUDNjiKG9gN3FTrdwKwdnAwEYX-F37sI_vLB1Zs8NQo0PObHYy0b0sf7WSLkzzcIgW9GR0FwcCCm1P8lB-50GQHPEBJUHNnhJyDzwRoRAkVzrf7UkV8wKCdTwrrWqiYDgbrzURfHc2ESsp020MicJTasSiXmNRgryt-gf50q5BMkiRH7osm4DoUgsjc_XyQiEmQmxl5sqZP7aKsaE-EM00x59XsPzD3m3YI6SRCFRUevSyumBd7KmXE8VuzIO9lgnnbka4-eZynZa6vbB9cO3QjLH0xSG3-egcplD1uLGh79wC34RF49Ui3eHwua4S9XHpH6YBe7gXzz6_mv-o-fxrOuphwfrtwvvi2FGfpTexWvxhqWICMFTTjFBCEGEgj7_IFWEKirXW2RTZCVF0Gid7EtIsoEeZkPbrcUISGmgtiJkJ_KojuKwImF0G0CsTlxYTOU2sPsd5o1JDt65wGniQR2IZufnPbbK76Yh_KI2DY4cUxMfcb2fAXcFMc9dcpHg6f9wBXhUtFYTu6pi5LhhGuhpkiGcv6vWYNxMrpWJW_pV7q8mPilwkAP-zw5MJxkgijl2wDMpM-UUQ_k37FVtf-ndbQAIPG7S469doZMmb5IZYgvcB4ojqCW3Vz6Q
Если капча ещё не решена, CapSkip вернёт CAPCHA_NOT_READY. В этом случае подождите 5 секунд и повторите запрос. Если CapSkip возвращает пустое тело ответа, результат уже был получен или ID не существует. Каждый результат можно прочитать только один раз.
Найдите элемент с ID g-recaptcha-response и сделайте его видимым, удалив display: none стиль.

Обратите внимание: В некоторых случаях содержимое страницы генерируется динамически, и
g-recaptcha-responseelement may not appear in the static HTML source. In such situations, inspect the page structure using your browser’s developer tools to locate the dynamically generated element.
В качестве альтернативы вы можете использовать JavaScript, чтобы задать значение g-recaptcha-response поле напрямую:
document.getElementById("g-recaptcha-response").innerHTML="TOKEN";На странице появится поле ввода. Вставьте токен-ответ в это поле и отправьте форму.
reCAPTCHA V2 Callback
В некоторых случаях кнопки отправки нет, и вместо неё используется функция callback. Функция callback выполняется автоматически, когда reCAPTCHA решена.
Список параметров POST- и GET-запросов доступен здесь: Параметры POST- и GET-запросов reCAPTCHA V2
Функция callback обычно определяется в data-callback атрибут виджета reCAPTCHA, например:
data-callback="myCallbackFunction"
В других случаях функция обратного вызова задаётся как callback параметр grecaptcha.render() функция, например:
grecaptcha.render('example', {
'sitekey' : 'someSitekey',
'callback' : myCallbackFunction,
'theme' : 'dark'
});Ещё один способ найти функцию callback — открыть JavaScript-консоль браузера и изучить объект конфигурации reCAPTCHA:
___grecaptcha_cfg.clients[0].aa.l.callback
Обратите внимание, что aa.l свойство может отличаться, и на странице может быть несколько клиентов reCAPTCHA. В таких случаях вам также следует проверить clients[1], clients[2], и другие записи, чтобы найти нужный объект конфигурации.
Как вариант, вы можете использовать следующий скрипт для автоматического извлечения параметров reCAPTCHA:
function findRecaptchaClients() {
if (typeof (___grecaptcha_cfg) !== 'undefined') {
return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' };
const objects = Object.entries(client).filter(([_, value]) => value && typeof value === 'object');objects.forEach(([toplevelKey, toplevel]) => {
const found = Object.entries(toplevel).find(([_, value]) => (
value && typeof value === 'object' && 'sitekey' in value && 'size' in value
));
if (typeof toplevel === 'object' && toplevel instanceof HTMLElement && toplevel['tagName'] === 'DIV'){
data.pageurl = toplevel.baseURI;
}
if (found) {
const [sublevelKey, sublevel] = found;data.sitekey = sublevel.sitekey;
const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback';
const callback = sublevel[callbackKey];
if (!callback) {
data.callback = null;
data.function = null;
} else {
data.function = callback;
const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join('');
data.callback = `___grecaptcha_cfg.clients${keys}`;
}
}
});
return data;
});
}
return [];
}Наконец, вызовите функцию callback:
myCallbackFunction();
Или как вариант:
___grecaptcha_cfg.clients[0].aa.l.callback();
В некоторых случаях функция callback требует аргумент. В большинстве ситуаций в качестве этого аргумента следует передавать решённый токен. Например:
myCallbackFunction('TOKEN');
reCAPTCHA V2 Invisible
У reCAPTCHA v2 также есть режим Invisible. Пример можно посмотреть здесь:
https://www.google.com/recaptcha/api2/demo?invisible=true
Invisible reCAPTCHA не отображает чекбокс “Я не робот”. Вместо этого она обычно привязана к кнопке или срабатывает автоматически при загрузке страницы или действии пользователя, например при нажатии кнопки или отправке формы.
Внутри виджет Invisible reCAPTCHA отображается внутри скрытого <div> элемент, расположенный за пределами видимой области, что делает его невидимым для пользователя.
В зависимости от cookie пользователя и оценки риска reCAPTCHA может пройти автоматически, не показывая задание. В противном случае появится стандартное задание с картинками.
В большинстве случаев после завершения задания выполняется функция callback. Подробнее см. в разделе о callback выше.
Список параметров POST- и GET-запросов доступен здесь: Параметры POST- и GET-запросов reCAPTCHA V2
Как определить, что reCAPTCHA является Invisible?
Вы можете определить Invisible reCAPTCHA по одному из следующих признаков:
Галочка «Я не робот» не видна, но задание появляется после взаимодействия пользователя.
URL iframe reCAPTCHA содержит параметр
size=invisible.Объект конфигурации reCAPTCHA включает
sizeсвойство, установленное вinvisible, например:___grecaptcha_cfg.clients[0].aa.l.size === "invisible"
При решении невидимой reCAPTCHA через API добавьте параметр: invisible=1
Как обработать невидимую reCAPTCHA в браузере?
Способ 1: с помощью JavaScript
Установите значение g-recaptcha-response поля значение токена, возвращённого CapSkip:
document.getElementById("g-recaptcha-response").innerHTML="TOKEN";После установки токена выполните действие, которое обычно происходит после успешной проверки.
В большинстве случаев это означает отправку формы. Вам нужно определить нужную форму по её id, name, или другой атрибут, а затем запустите отправку. Вот несколько примеров:
document.getElementById("recaptcha-demo-form").submit(); //by id "recaptcha-demo-form"
document.getElementsByName("myFormName")[0].submit(); //by element name "myFormName"
document.getElementsByClassName("example").submit(); //by class name "example"В некоторых случаях callback-функция выполняется автоматически, когда reCAPTCHA решена.
Функция callback обычно определяется в data-callback атрибут виджета reCAPTCHA, например:
data-callback="myCallbackFunction"
В других случаях функция обратного вызова задаётся как callback параметр grecaptcha.render() функция, например:
grecaptcha.render('example', {
'sitekey' : 'someSitekey',
'callback' : myCallbackFunction,
'theme' : 'dark'
});Всё, что вам нужно сделать, — вызвать эту функцию:
myCallbackFunction();
Способ 2: изменение HTML
Удалите <div> элемент, содержащий виджет reCAPTCHA, из тела страницы.
<div style="visibility: hidden; position: absolute; width:100%; top: -10000px; left: 0px; right: 0px; transition: visibility 0s linear 0.3s, opacity 0.3s linear; opacity: 0;"> <div style="width: 100%; height: 100%; position: fixed; top: 0px; left: 0px; z-index: 2000000000; background-color: #fff; opacity: 0.5; filter: alpha(opacity=50)"></div> <div style="margin: 0 auto; top: 0px; left: 0px; right: 0px; position: absolute; border: 1px solid #ccc; z-index: 2000000000; background-color: #fff; overflow: hidden;"> <iframe src="https://www.google.com/recaptcha/api2/bframe?hl=en&v=r20170213115309&k=6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs#zglq3yifgkmj" title="recaptcha challenge" style="width: 100%; height: 100%;" scrolling="no" name="zglq3yifgkmj" frameborder="0"></iframe> </div> </div>
Удалите весь блок reCAPTCHA со страницы.
<div class="">
<!-- BEGIN: ReCAPTCHA implementation example. -->
<div
id="recaptcha-demo"
class="g-recaptcha"
data-sitekey="6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs"
data-callback="onSuccess"
data-bind="recaptcha-demo-submit"
>
<div
class="grecaptcha-badge"
style="width: 256px; height: 60px; transition: right 0.3s ease 0s; position: fixed; bottom: 14px; right: -186px; box-shadow: 0px 0px 5px gray;"
>
<div class="grecaptcha-logo">
<iframe
src="https://www.google.com/recaptcha/api2/anchor?k=6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs&co=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbTo0NDM.&hl=en&v=r20170213115309&size=invisible&cb=uror1hlow5a"
title="recaptcha widget"
scrolling="no"
name="undefined"
width="256"
height="60"
frameborder="0"
></iframe>
</div>
<div class="grecaptcha-error"></div>
<textarea
id="g-recaptcha-response"
name="g-recaptcha-response"
class="g-recaptcha-response"
style="width: 250px; height: 40px; border: 1px solid #c1c1c1; margin: 10px 25px; padding: 0px; resize: none; display: none; "
></textarea>
</div>
</div>
<script>
var onSuccess = function (response) {
var errorDivs = document.getElementsByClassName('recaptcha-error');
if (errorDivs.length) {
errorDivs[0].className = '';
}
var errorMsgs = document.getElementsByClassName('recaptcha-error-message');
if (errorMsgs.length) {
errorMsgs[0].parentNode.removeChild(errorMsgs[0]);
}
document.getElementById('recaptcha-demo-form').submit();
};
</script>
<!-- Optional noscript fallback. --><!-- END: ReCAPTCHA implementation example. -->
</div>Вставьте следующий код на место удалённого блока:
<input type="submit" /> <textarea name="g-recaptcha-response">%g-recaptcha-response%</textarea>
%g-recaptcha-response% представляет токен-ответ, полученный от CapSkip.
После замены блока появится кнопка “Submit query”. Нажмите её, чтобы отправить форму вместе с g-recaptcha-response значение и все остальные необходимые данные формы на сайт.
reCAPTCHA V3
reCAPTCHA v3 — это современный механизм капчи, разработанный Google. Он не показывает видимую проверку и не требует действий пользователя. Вместо этого он присваивает оценку на основе вероятности того, что взаимодействие исходит от человека.
Технически reCAPTCHA v3 похожа на reCAPTCHA v2. Сайт получает токен от reCAPTCHA API, который затем отправляется в POST-запросе на целевой сервер и проверяется через reCAPTCHA API.
Ключевое отличие в том, что reCAPTCHA v3 не показывает видимой капчи. Вместо этого она возвращает оценку, которая определяет, человек перед нами или бот. Эта оценка называется score и варьируется от 0,0 до 1,0. Оценка отправляется на сайт, который затем решает, как обработать запрос на основе этого значения.
Также есть дополнительный параметр под названием action, что позволяет сайту различать разные взаимодействия пользователя. После проверки токена API reCAPTCHA возвращает имя действия, связанное с запросом.
Как решить reCAPTCHA v3 с помощью CapSkip?
Сначала убедитесь, что целевой сайт использует reCAPTCHA v3.
Признаки reCAPTCHA v3 включают:
Без видимой капчи или графических проверок
The
api.jsскрипт загружается сrender=SITEKEYпараметр, например:https://www.google.com/recaptcha/api.js?render=SITEKEYThe
___grecaptcha_cfg.clientsмассив содержит запись с большим числовым индексом, напримерclients[100000]
Чтобы решить reCAPTCHA v3, определите следующие параметры:
- sitekey
Это можно найти вrenderпараметрapi.jsURL скрипта. Он также может встречаться в URL iframe, внутри JavaScript-кода, который вызываетgrecaptcha.execute(), или внутри___grecaptcha_cfgобъект конфигурации. - action
Найдите это, изучив JavaScript-код на предмет вызововgrecaptcha.execute(), например:grecaptcha.execute('SITEKEY', {action: 'do_something'})В некоторых случаях для поиска action требуется просмотреть несколько файлов JavaScript, загружаемых страницей. Если вы не можете определить значение action, вы можете использовать значение по умолчанию"verify". - pageurl
Полный URL страницы, где реализован reCAPTCHA v3.
Разбираемся с оценкой
Допустимый порог оценки различается на разных сайтах и может быть определён только опытным путём. Оценки варьируются от:
0.0 → вероятно, бот
1.0 → скорее всего человек
Большинство сайтов используют пороги от 0,3 до 0,7, поскольку даже легитимные пользователи могут получать более низкие оценки.
Вы можете передать нужный порог с помощью min_score параметр, но итоговый score всегда определяется Google в момент проверки и не может быть гарантирован решателем.
Список параметров POST-запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| key | Строка | Да | Ваш API-ключ CapSkip. |
| method | Строка | Да | userrecaptcha – указывает на запрос reCAPTCHA. |
| version | Строка | Да | v3 – указывает, что запрос относится к reCAPTCHA v3. |
| googlekey | Строка | Да | Значение data-sitekey параметр, найденный на целевой странице. |
| pageurl | Строка | Да | Полный URL страницы, на которой расположена reCAPTCHA. |
| enterprise | Целое число По умолчанию: 0 | Нет |
1 – указывает на reCAPTCHA Enterprise v3. 0 – стандартная reCAPTCHA v3. |
| action | Строка По умолчанию: verify | Нет | Значение action параметр, заданный на странице. |
| min_score | Float | Нет | Запрашиваемый минимальный score для токена. Google присваивает итоговый score, когда ваш сервер проверяет токен, поэтому это значение — лишь подсказка, а не гарантия. CapSkip возвращает полученный токен независимо от score, который Google присвоит позже. |
| json | Целое число По умолчанию: 0 | Нет |
0 – ответ возвращается в виде обычного текста. 1 – ответ возвращается в формате JSON. |
| proxy | Строка | Нет | Адрес прокси. Формат для аутентификации по IP: IP:PORT (пример: 123.123.123.123:3128). Формат для аутентификации по логину/паролю: login:password@IP:PORT |
| proxytype | Строка | Нет | Тип прокси. Поддерживаемые значения: HTTP, HTTPS, SOCKS5, SOCKS5H. По умолчанию: HTTP когда proxy предоставлен, но proxytype опущен. |
Отправка reCAPTCHA v3:
curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&version=v3&action=submit&min_score=0.7&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com" http://127.0.0.1:8080/in.php
Отправка Enterprise reCAPTCHA v3:
curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&version=v3&action=submit&min_score=0.7&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&enterprise=1" http://127.0.0.1:8080/in.php
Если запрос успешен, CapSkip вернёт ID капчи в виде простого текста: OK|12345
Если json=1 параметр указан, ответ будет возвращён в формате JSON:
{
"status":1,
"request":"12345"
}Если возникает ошибка, CapSkip вернёт код ошибки.
Подождите от 10 до 15 секунд, затем отправьте HTTP GET-запрос на эндпоинт результата: http://127.0.0.1:PORT/res.php
Укажите возвращённый CAPTCHA ID в своём запросе. Полный список доступных параметров приведён в таблице ниже.
Если капча решена успешно, CapSkip вернёт результат в виде обычного текста или в формате JSON. Возвращаемое значение — это токен проверки, похожий на следующий:
03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq-uBO5mVm2XRikL8iKOWr0aG50sCuej9bXx5qcviUGSm4iK4NC_Q88flavWhaTXSh0VxoihBwBjXxwXuJZ-WGN5Sy4dtUl2wbpMqAj8Zwup1vyCaQJWFvRjYGWJ_TQBKTXNB5CCOgncqLetmJ6B6Cos7qoQyaB8ZzBOTGf5KSP6e-K9niYs772f53Oof6aJeSUDNjiKG9gN3FTrdwKwdnAwEYX-F37sI_vLB1Zs8NQo0PObHYy0b0sf7WSLkzzcIgW9GR0FwcCCm1P8lB--gf50q5BMkiRH7osm4DoUgsjc_XyQiEmQmxl5sqZP7aKsaE-EM00x59XsPzD3m3YI6SRCFRUevSyumBd7KmXE8VuzIO9lgnnbka4-eZynZa6vbB9cO3QjLH0xSG3--o-fxrOuphwfrtwvvi2FGfpTexWvxhqWICMFTTjFBCEGEgj7_IFWEKirXW2RTZCVF0Gid7EtIsoEeZkPbrcUISGmgtiJkJ_KojuKwImF0G0CsTlxYTOU2sPsd5o1JDt65wGniQR2IZufnPbbK76Yh_KI2DY4cUxMfcb2fAXcFMc9dcpHg6f9wBXhUtFYTu6pi5LhhGuhpkiGcv6vWYNxMrpWJW_pV7q8mPilwkAP-zw5MJxkgijl2wDMpM-UUQ_k37FVtf-ndbQAIPG7S469doZMmb5IZYgvcB4ojqCW3Vz6Q
Если капча ещё не решена, CapSkip вернёт CAPCHA_NOT_READY. Подождите 5 секунд и повторите запрос. Если CapSkip возвращает пустое тело ответа, значит, результат уже получен или ID не существует. Каждый результат можно прочитать только один раз.
Список параметров GET-запроса
| Параметр GET | Тип | Обязательно | Описание |
|---|---|---|---|
| key | Строка | Да | Ваш API-ключ CapSkip. |
| action | Строка | Да | get – получить ответ для отправленной капчи. |
| id | Целое число | Да |
Идентификатор CAPTCHA, возвращаемый in.php. |
| json | Целое число По умолчанию: 0 | Нет |
0 – ответ возвращается в виде обычного текста 1 – ответ возвращается в формате JSON |
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=CAPTCHA_ID"
После получения токена от CapSkip вы должны правильно отправить его на целевой сайт. Лучший способ понять, как это работает, — понаблюдать за запросами, отправляемыми при прохождении проверки как обычный пользователь. Большинство браузеров предоставляют инструменты разработчика с Network вкладка, которая позволяет проверять исходящие запросы.
В большинстве случаев токен отправляется через POST-запрос. Имя параметра может быть g-recaptcha-response, похоже на reCAPTCHA v2, или что-то вроде g-recaptcha-response-100000. В некоторых реализациях может использоваться другое имя параметра.
Вам следует изучить сетевые запросы, чтобы определить, как передаётся токен, и затем соответствующим образом построить свой запрос.
reCAPTCHA Enterprise
reCAPTCHA Enterprise — это продвинутая версия системы reCAPTCHA от Google. Она может работать в режимах v2 и v3 и предоставляет администраторам сайтов дополнительный контроль, включая возможность оценивать и сообщать, было ли взаимодействие человеческим или автоматизированным.
Как решать reCAPTCHA Enterprise?
Первый шаг — определить, использует ли сайт версию reCAPTCHA Enterprise.
Ключевые признаки reCAPTCHA Enterprise включают:
Страница загружается
enterprise.jsвместоapi.js, например:<script src="https://recaptcha.net/recaptcha/enterprise.js" async defer></script>
JavaScript-код сайта вызывает
grecaptcha.enterprise.METHODвместоgrecaptcha.METHOD
Затем определите, какая реализация используется: v2, Invisible v2 или v3. Обычно это можно выяснить, проанализировав, как отрисовывается виджет и как он ведёт себя на странице.
Следуйте приведённой ниже блок-схеме, чтобы определить правильную реализацию. Она применима в подавляющем большинстве случаев.

Определите параметры капчи так же, как описано для reCAPTCHA v2 или v3.
Для реализаций v2 Enterprise могут быть дополнительные необязательные данные. В большинстве случаев это пользовательская строка, заданная в s или data-s параметр. Если он присутствует, включите это значение в свой запрос, используя data-s параметр.
Список параметров POST- и GET-запросов доступен здесь: Параметры POST- и GET-запросов reCAPTCHA V2
Для реализаций v3 Enterprise вам также может понадобиться action значение. Чтобы найти его, изучите JavaScript-код сайта и найдите grecaptcha.enterprise.execute() вызов. action параметр обычно передаётся внутри этой функции. Имейте в виду, что action необязателен и в некоторых случаях может быть undefined.
Список параметров POST- и GET-запросов доступен здесь: Параметры POST- и GET-запросов reCAPTCHA V3
При отправке вашего запроса в /in.php эндпоинт, включите дополнительный параметр: enterprise=1
После этого работайте с API CapSkip так же, как при решении reCAPTCHA v2 или v3. Как только токен получен, отправьте его на целевой сайт в соответствии с его реализацией.
Cloudflare Turnstile
Cloudflare Turnstile — это современная альтернатива капче, разработанная Cloudflare. Она проверяет, является ли посетитель человеком, не полагаясь на традиционные визуальные проверки. Turnstile может отображаться как отдельный виджет или как часть страницы-проверки и работает при минимальном участии пользователя или вовсе без него.
Существуют две распространённые реализации Turnstile:
1. Отдельный виджет Turnstile
Отдельный виджет Turnstile встраивается прямо на страницу сайта и обычно защищает форму от автоматических отправок. В этом случае:
Извлеките
sitekeyfrom the page.Отправьте его в CapSkip API вместе с полным
pageurl.После получения токена вставьте его в
cf-turnstile-responseполе.В некоторых реализациях токен также может потребоваться поместить в
g-recaptcha-responseполе.Если callback определён в
turnstile.render()конфигурацию, выполните её с возвращённым токеном.
Затем отправьте форму как обычно.
2. Turnstile на странице проверки Cloudflare
Это происходит, когда сайт проксируется через Cloudflare и показывает страницу проверки Turnstile перед предоставлением доступа. В этом случае необходимо извлечь следующие параметры:
cDatachlPageDataaction
Эти значения должны быть включены в ваш запрос к API. Кроме того, вы должны использовать User-Agent значение, возвращаемое API CapSkip при отправке токена.
Как извлечь необходимые параметры?
Чтобы извлечь необходимые параметры, вы можете переопределить turnstile.render метод и перехватите аргументы, передаваемые при его вызове. Например, внедрите на страницу следующий JavaScript-код. Скрипт должен быть выполнен до загрузки виджета Turnstile, чтобы успешно захватить параметры.
const i = setInterval(()=>{
if (window.turnstile) {
clearInterval(i)
window.turnstile.render = (a,b) => {
let p = {
method: "turnstile",
key: "YOUR_API_KEY",
sitekey: b.sitekey,
pageurl: window.location.href,
data: b.cData,
pagedata: b.chlPageData,
action: b.action,
userAgent: navigator.userAgent,
json: 1
}
console.log(JSON.stringify(p))
window.tsCallback = b.callback
return 'foo'
}
}
},50)Список параметров POST-запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| key | Строка | Да | Ваш API-ключ CapSkip. |
| method | Строка | Да | turnstile – указывает на запрос Cloudflare Turnstile. |
| sitekey | Строка | Да | Значение data-sitekey параметр, найденный на целевой странице. |
| pageurl | Строка | Да | Полный URL страницы, на которой расположено задание Turnstile. |
| action | Строка | Нет |
Необязательное значение action, заданное в data-action атрибут или передаётся в turnstile.render(). |
| data | Строка | Нет |
Значение cData переданный в turnstile.render() или задан в data-cdata атрибут. |
| pagedata | Строка | Нет |
Значение chlPageData переданный в turnstile.render(). |
| json | Целое число По умолчанию: 0 | Нет |
0 – ответ возвращается в виде обычного текста. 1 – ответ возвращается в формате JSON. |
| proxy | Строка | Нет | Адрес прокси. Формат для аутентификации по IP: IP:PORT (пример: 123.123.123.123:3128). Формат для аутентификации по логину/паролю: login:password@IP:PORT |
| proxytype | Строка | Нет | Тип прокси. Поддерживаемые значения: HTTP, HTTPS, SOCKS5, SOCKS5H. По умолчанию: HTTP когда proxy предоставлен, но proxytype опущен. |
Отправка Turnstile (отдельно):
curl -X POST -d "key=YOUR_API_KEY&method=turnstile&sitekey=0x4AAAAAAABUYP0XeMJF0xoy&pageurl=https://example.com" http://127.0.0.1:8080/in.php
Отправка Turnstile (challenge – опциональные action, data, pagedata):
curl -X POST -d "key=YOUR_API_KEY&method=turnstile&sitekey=0x4AAAAAAABUYP0XeMJF0xoy&pageurl=https://example.com&action=managed&data=...&pagedata=..." http://127.0.0.1:8080/in.php
Если запрос успешен, CapSkip вернёт ID капчи в виде простого текста: OK|12345
Если json=1 параметр указан, ответ будет возвращён в формате JSON:
{
"status":1,
"request":"12345"
}Если возникает ошибка, CapSkip вернёт код ошибки.
Используйте возвращённый ID, чтобы получить результат из /res.php эндпоинт API.
Список параметров GET-запроса
| Параметр GET | Тип | Обязательно | Описание |
|---|---|---|---|
| key | Строка | Да | Ваш API-ключ CapSkip. |
| action | Строка | Да | get – получить ответ для отправленной капчи. |
| id | Целое число | Да |
Идентификатор CAPTCHA, возвращаемый in.php. |
| json | Целое число По умолчанию: 0 | Нет |
0 — ответ возвращается в виде простого текста. 1 — ответ возвращается в формате JSON, включая userAgent значение. |
Для Cloudflare Turnstile сервис распознавания использует определённый User-Agent браузера, и вы должны отправлять тот же самый User-Agent при передаче токена. С json=1 ответ включает userAgent поле. В режиме простого текста считайте то же значение из X-Turnstile-User-Agent заголовок ответа.
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=CAPTCHA_ID"
GeeTest v3 Slider — это интерактивная капча, разработанная GeeTest. Она проверяет пользователей с помощью задачи с ползунком, чтобы отличить людей от ботов, обеспечивая быструю и удобную верификацию.
Чтобы решить капчу GeeTest v3 с помощью CapSkip, вы должны сначала получить необходимые параметры капчи с целевого сайта. Необходимые параметры:
- gt: публичный ключ сайта (статичный)
- challenge: динамическое значение challenge
- api_server: домен API-сервера GeeTest (необязательно)
Эти значения обычно доступны, когда сайт инициализирует GeeTest.
Важно: Новый
challengeзначение необходимо получать для каждого запроса на решение. После того как капча загружена на странице, предыдущееchallengeстановится недействительным. Вам следует изучить сетевые запросы сайта’, чтобы определить запрос, который генерирует новыйchallengeзначение и выполните этот запрос, прежде чем отправлять каждый запрос на решение в CapSkip.
Список параметров POST-запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| key | Строка | Да* | Ваш API-ключ CapSkip. Требуется только когда Проверка API-ключа включён. |
| method | Строка | Да | Должно быть geetest. Указывает, что вы отправляете капчу GeeTest v3. |
| gt | Строка | Да | The gt значение, полученное с целевого сайта. |
| challenge | Строка | Да | The challenge значение, полученное с целевого сайта. Для каждого запроса на решение необходимо получать новое значение. |
| pageurl | Строка | Да | Полный URL страницы, содержащей капчу GeeTest. |
| api_server | Строка | Нет | Домен сервера API GeeTest, используемый целевым сайтом (например api.geetest.com или api-na.geetest.com). |
| json | Целое число По умолчанию: 0 | Нет | 0 возвращает ответ в виде обычного текста. 1 возвращает ответ в формате JSON. |
| proxy | Строка | Нет | Адрес прокси. Формат для аутентификации по IP: IP:PORT (пример: 123.123.123.123:3128). Формат для аутентификации по логину/паролю: login:password@IP:PORT. |
| proxytype | Строка | Нет | Тип прокси. Поддерживаемые значения: HTTP, HTTPS, SOCKS5, SOCKS5H. По умолчанию: HTTP когда proxy предоставлен, но proxytype опущен. |
Отправьте HTTP-запрос GET или POST на ваш CapSkip API endpoint (/in.php) с method=geetest. Включите необходимые параметры GeeTest, полученные на предыдущем шаге, вместе с полным URL страницы, содержащей капчу.
curl -X POST \ -d "key=YOUR_API_KEY" \ -d "method=geetest" \ -d "gt=f1ab2cdefa3456789012345b6c78d90e" \ -d "challenge=12345678abc90123d45678ef90123a456b" \ -d "pageurl=https://www.example.com/" \ -d "api_server=api-na.geetest.com" \ http://127.0.0.1:8080/in.php
Если всё прошло успешно, CapSkip вернёт ID капчи в виде простого текста: OK|212
Если json=1 параметр указан, ответ будет возвращён в формате JSON:
{
"status": 1,
"request": "212"
}В противном случае CapSkip вернёт соответствующий код ошибки.
Подождите примерно 5 секунд, затем отправьте HTTP GET-запрос на res.php эндпоинт, чтобы получить результат.
Список параметров GET-запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| key | Строка | Да* | Ваш API-ключ CapSkip. Требуется только когда Проверка API-ключа включён. |
| action | Строка | Да | Укажите get чтобы получить решение капчи. |
| id | Целое число | Да | CAPTCHA ID, возвращённый in.php запрос. |
| json | Целое число По умолчанию: 0 | Нет | 0 возвращает ответ в виде обычного текста. 1 возвращает ответ в формате JSON. |
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=212&json=1"
Если капча успешно решена, CapSkip вернёт решение в формате JSON:
{
"status": 1,
"request": "{\"geetest_challenge\":\"1a2b3456cd67890e12345fab678901c2de\",\"geetest_validate\":\"09fe8d7c6ba54f32e1dcb0a9fedc8765\",\"geetest_seccode\":\"12fe3d4c56789ba01f2e345d6789c012|jordan\"}"
}Если капча ещё не решена, CapSkip вернёт: CAPCHA_NOT_READY
Подождите 5 секунд и повторите запрос. Если произойдёт ошибка, CapSkip вернёт соответствующий код ошибки. Используйте значения, возвращённые CapSkip, при отправке запроса на целевой сайт, применяя следующие поля:
geetest_challengegeetest_validategeetest_seccode
Использование прокси
Для reCAPTCHA v2, v3, Invisible, Enterprise и Cloudflare вы можете отправлять прокси с каждой задачей. CapSkip решит капчу через этот прокси вместо пула прокси, настроенного в приложении CapSkip.
Это полезно, когда целевой сайт проверяет, что токен капчи был сгенерирован с того же IP-адреса, что и ваши собственные запросы, например, для сайтов за Cloudflare, при строгой оценке reCAPTCHA или на страницах с гео-ограничениями.
Список параметров POST-запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
| proxy | Строка | Нет | Адрес прокси. Формат для аутентификации по IP: IP:PORT (пример: 123.123.123.123:3128). Формат для аутентификации по логину/паролю: login:password@IP:PORT |
| proxytype | Строка | Нет | Тип прокси. Поддерживаемые значения: HTTP, HTTPS, SOCKS5, SOCKS5H. По умолчанию: HTTP когда proxy предоставлен, но proxytype опущен. |
Коды ошибок
| Код | Значение |
|---|---|
ERROR_KEY_DOES_NOT_EXIST | Неверный ключ API. |
ERROR_WRONG_USER_KEY | API-ключ отсутствует или пуст. |
ERROR_WRONG_METHOD | Недопустимый метод HTTP или action параметр. |
ERROR_WRONG_ID_FORMAT | Неверный формат ID капчи. |
ERROR_BAD_PARAMETERS | Отсутствуют или недействительны обязательные параметры. |
ERROR_UPLOAD | Данные изображения не предоставлены или загрузка не удалась. |
ERROR_INVALID_IMAGE | Недопустимый формат изображения или повреждённые данные изображения. |
ERROR_INVALID_BASE64 | Некорректная кодировка base64. |
ERROR_TOO_BIG_CAPTCHA_FILESIZE | Размер изображения превышает 600 КБ или размеры превышают 1000px. |
ERROR_CAPTCHA_UNSOLVABLE | Не удалось решить капчу. Отправьте новую задачу и повторите попытку. |
ERROR_GOOGLEKEY | Некорректно googlekey параметр. |
ERROR_PAGEURL | Некорректно pageurl параметр. |
CAPCHA_NOT_READY | Капча всё ещё обрабатывается. Продолжайте опрос. |
| (пустой ответ) | Результат уже был получен, или ID не существует. |
