REST API · Распознавание капч

GliderCap API

Сервис автоматического распознавания капч. Один домен, один эндпоинт — а нужный вид капчи выбирается полем type в запросе. Поддерживаются SmartCaptcha (клики по иконкам) и TextCaptcha (распознавание текста).

1 домен
единый базовый URL
1 эндпоинт
вид капчи задаёт type
2 типа
Smart + Text капчи

01 Введение

GliderCap — HTTP API для распознавания капч. Отправляете картинку в Base64 — получаете координаты кликов или распознанный текст. Вся работа — два POST-запроса с телом в формате JSON.

1
Создать задачуОтправляете капчу методом POST /v1/captcha/create и получаете идентификатор task_id.
2
Забрать результатОпрашиваете POST /v1/captcha/result по task_id, пока не придёт готовый ответ.

Базовый URL

https://api.lprcap.com

Авторизация

В каждом запросе передавайте свой API-ключ в HTTP-заголовке X-API-Key:

HTTP header
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. Создание задачи

POSThttps://api.lprcap.com/v1/captcha/create

Тело запроса

request.json
{
  "type":  "SmartCaptcha",
  "click": "<base64 основной картинки>",
  "task":  "<base64 картинки-задания>"
}

Успешный ответ

response.json
{
  "status": 1,
  "response": "a1b2c3d4-5678-90ab-cdef-1234567890ab"   // task_id
}

Шаг 2. Получение результата

POSThttps://api.lprcap.com/v1/captcha/result

Тело запроса

request.json
{ "id": "a1b2c3d4-5678-90ab-cdef-1234567890ab" }

Пока задача решается

response.json
{ "status": 0, "response": "CAPCHA_NOT_READY" }   // опросите снова через 200–300 мс

Готовый результат

response.json
{
  "status": 1,
  "response": "coordinates:x=44,y=61;x=250,y=34;x=270,y=93"
}
Поле response содержит точки в формате x=…,y=… через ; — кликайте по ним в указанном порядке.

03 TextCaptcha

На вход — одна картинка в Base64 в поле task. В ответ приходит распознанная строка.

Шаг 1. Создание задачи

POSThttps://api.lprcap.com/v1/captcha/create

Тело запроса

request.json
{
  "type": "TextCaptcha",
  "task": "<base64 картинки с текстом>"
}

Успешный ответ

response.json
{ "status": 1, "response": "<task_id>" }

Шаг 2. Получение результата

POSThttps://api.lprcap.com/v1/captcha/result

Тело запроса

request.json
{ "id": "<task_id>" }

Готовый результат

response.json
{ "status": 1, "response": "<распознанный текст>" }
Пока текст распознаётся, /v1/captcha/result так же вернёт CAPCHA_NOT_READY — повторяйте опрос через 200–300 мс.

04 Примеры кода

Полный цикл создать → опросить → получить результат для SmartCaptcha. Подставьте свой ключ вместо tc_live_xxxxxxxx и пути к своим картинкам. Для TextCaptcha поменяйте type на "TextCaptcha" и оставьте только поле task.

bash · curl
# 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;..."}
python · requests
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 · curl
<?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=..
node.js · fetch
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=..
})();