GliderCap API
Сервис автоматического распознавания капч. Один домен, один эндпоинт —
а нужный вид капчи выбирается полем type в запросе.
Поддерживаются SmartCaptcha (клики по иконкам) и
TextCaptcha (распознавание текста).
type01 Введение
GliderCap — HTTP API для распознавания капч. Отправляете картинку в Base64 — получаете координаты кликов или распознанный текст. Вся работа — два POST-запроса с телом в формате JSON.
POST /v1/captcha/create и получаете идентификатор task_id.POST /v1/captcha/result по task_id, пока не придёт готовый ответ.Базовый URL
https://api.lprcap.com
Авторизация
В каждом запросе передавайте свой API-ключ в HTTP-заголовке X-API-Key:
X-API-Key: tc_live_xxxxxxxx
tc_live_… и выдаётся при подключении. Запросы выполняйте со своего сервера, не публикуйте ключ в браузерном коде.Поле type
Один эндпоинт на всё — вид капчи выбирается полем type в теле запроса.
Значение type | Что распознаётся | Картинки |
|---|---|---|
"SmartCaptcha" | Клики по иконкам в нужном порядке | click, task |
"TextCaptcha" | Текст с искажённой картинки | task |
/v1/captcha/result с интервалом 200–300 мс, пока не получите status: 1. Изображения передавайте строкой в кодировке Base64.02 SmartCaptcha
На вход — две картинки в Base64. В ответ приходят координаты кликов по иконкам в правильном порядке.
click— основная картинка, на которой нужно кликать;task— картинка-задание: иконки в том порядке, в котором их нужно нажать.
Шаг 1. Создание задачи
Тело запроса
{
"type": "SmartCaptcha",
"click": "<base64 основной картинки>",
"task": "<base64 картинки-задания>"
}
Успешный ответ
{
"status": 1,
"response": "a1b2c3d4-5678-90ab-cdef-1234567890ab" // task_id
}
Шаг 2. Получение результата
Тело запроса
{ "id": "a1b2c3d4-5678-90ab-cdef-1234567890ab" }
Пока задача решается
{ "status": 0, "response": "CAPCHA_NOT_READY" } // опросите снова через 200–300 мс
Готовый результат
{
"status": 1,
"response": "coordinates:x=44,y=61;x=250,y=34;x=270,y=93"
}
response содержит точки в формате x=…,y=… через ; — кликайте по ним в указанном порядке.03 TextCaptcha
На вход — одна картинка в Base64 в поле task. В ответ приходит распознанная строка.
Шаг 1. Создание задачи
Тело запроса
{
"type": "TextCaptcha",
"task": "<base64 картинки с текстом>"
}
Успешный ответ
{ "status": 1, "response": "<task_id>" }
Шаг 2. Получение результата
Тело запроса
{ "id": "<task_id>" }
Готовый результат
{ "status": 1, "response": "<распознанный текст>" }
/v1/captcha/result так же вернёт CAPCHA_NOT_READY — повторяйте опрос через 200–300 мс.04 Примеры кода
Полный цикл создать → опросить → получить результат для SmartCaptcha.
Подставьте свой ключ вместо tc_live_xxxxxxxx и пути к своим картинкам.
Для TextCaptcha поменяйте type на "TextCaptcha" и оставьте только поле task.
# 1. Кодируем картинки в base64
CLICK=$(base64 -w0 click.png)
TASK=$(base64 -w0 task.png)
# 2. Создаём задачу → получаем task_id
ID=$(curl -s https://api.lprcap.com/v1/captcha/create \
-H "X-API-Key: tc_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d "{\"type\":\"SmartCaptcha\",\"click\":\"$CLICK\",\"task\":\"$TASK\"}" \
| sed -E 's/.*"response":"([^"]+)".*/\1/')
# 3. Опрашиваем результат, пока не готов
while :; do
RES=$(curl -s https://api.lprcap.com/v1/captcha/result \
-H "X-API-Key: tc_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d "{\"id\":\"$ID\"}")
echo "$RES" | grep -q CAPCHA_NOT_READY && { sleep 0.25; continue; }
echo "$RES"; break
done
# → {"status":1,"response":"coordinates:x=44,y=61;x=250,y=34;..."}import requests, base64, time
API = "https://api.lprcap.com"
KEY = "tc_live_xxxxxxxx"
s = requests.Session()
s.headers.update({"X-API-Key": KEY})
click = base64.b64encode(open("click.png", "rb").read()).decode()
task = base64.b64encode(open("task.png", "rb").read()).decode()
# 1. создать задачу
task_id = s.post(f"{API}/v1/captcha/create", json={
"type": "SmartCaptcha", "click": click, "task": task,
}).json()["response"]
# 2. забрать результат
while True:
time.sleep(0.3)
r = s.post(f"{API}/v1/captcha/result", json={"id": task_id}).json()
if r["status"] == 1:
print(r["response"]) # coordinates:x=..,y=..
break<?php
$API = "https://api.lprcap.com";
$h = ["X-API-Key: tc_live_xxxxxxxx", "Content-Type: application/json"];
function post($url, $h, $body) {
$c = curl_init($url);
curl_setopt_array($c, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1,
CURLOPT_HTTPHEADER => $h, CURLOPT_POSTFIELDS => json_encode($body)]);
return json_decode(curl_exec($c), true);
}
// 1. создать задачу
$id = post("$API/v1/captcha/create", $h, [
"type" => "SmartCaptcha",
"click" => base64_encode(file_get_contents("click.png")),
"task" => base64_encode(file_get_contents("task.png")),
])["response"];
// 2. забрать результат
do {
usleep(300000);
$res = post("$API/v1/captcha/result", $h, ["id" => $id]);
} while ($res["status"] !== 1);
echo $res["response"]; // coordinates:x=..,y=..const fs = require("fs");
const API = "https://api.lprcap.com";
const H = { "X-API-Key": "tc_live_xxxxxxxx", "Content-Type": "application/json" };
const b64 = p => fs.readFileSync(p).toString("base64");
const sleep = ms => new Promise(r => setTimeout(r, ms));
const post = (path, body) =>
fetch(API + path, { method: "POST", headers: H, body: JSON.stringify(body) }).then(r => r.json());
(async () => {
// 1. создать задачу
let { response: id } = await post("/v1/captcha/create", {
type: "SmartCaptcha", click: b64("click.png"), task: b64("task.png"),
});
// 2. забрать результат
let res;
do { await sleep(300); res = await post("/v1/captcha/result", { id }); }
while (res.status !== 1);
console.log(res.response); // coordinates:x=..,y=..
})();