Glidercap — сервис распознавания изображений. Два запроса: создать задачу и получить координаты. Скорость распознавания ~0.2 секунды. URL: https://api.captchacom.ru.
Что решаем
main #1 — фото-фон с контурными символами
ещё один пример — другая сцена, другие символы
Эти две картинки доступны как живые эталоны по URL — в примерах кода ниже их можно скачать одной строкой и пощупать API без правок.
POSTСоздание задачи
URL
https://api.captchacom.ru/createЗаголовок
X-API-Key: tc_live_XXXXТело (JSON)
{
"type": "SmartCaptcha",
"click": "<base64 PNG click.png>",
"task": "<base64 PNG task.png>",
}
Ответ:
{"status": 1, "response": "9001c2d7-7298-49f1-9f24-eaed5aa66c13"}
Сохраните response (это task_id) — он понадобится во втором запросе.
POSTПолучение результата
URL
https://api.captchacom.ru/resultЗаголовок
X-API-Key: tc_live_XXXXТело (JSON)
{"id": "9001c2d7-7298-49f1-9f24-eaed5aa66c13"}
Готово:
{"status": 1, "response": "coordinates:x=44,y=120;x=204,y=85;x=196,y=27;x=154,y=142;x=273,y=145;x=195,y=27"}
В response — шесть координат точек, на которые нужно «кликнуть» в исходной капче.
Ещё не готово:
{"status": 0, "response": "CAPCHA_NOT_READY"}
Примеры использования
Каждый пример end-to-end: скачивает наши эталонные click.png + task.png, создаёт задачу, опрашивает результат, печатает координаты. Подставьте свой tc_live_… ключ.
Python
Node.js
PHP
curl
import base64, requests, time
API_KEY = "tc_live_XXXX" # <-- ваш ключ
URL = "https://api.captchacom.ru"
EX = "https://captchacom.ru/lk/examples"
# 1. Скачиваем эталонные картинки
click = base64.b64encode(requests.get(f"{EX}/click.png").content).decode()
task = base64.b64encode(requests.get(f"{EX}/task.png").content).decode()
# 2. Создаём задачу
r = requests.post(URL + "/create",
headers={"X-API-Key": API_KEY},
json={"type":"SmartCaptcha", "click":click, "task":task}).json()
assert r["status"] == 1, r
task_id = r["response"]
print("task_id:", task_id)
# 3. Опрашиваем результат каждые 2с
for _ in range(15):
time.sleep(2)
r = requests.post(URL + "/result",
headers={"X-API-Key": API_KEY},
json={"id": task_id}).json()
if r["status"] == 1:
print("OK:", r["response"])
break
if r["response"] != "CAPCHA_NOT_READY":
print("ERROR:", r["response"]); breakconst fetch = require('node-fetch'); // npm i node-fetch@2
const API_KEY = 'tc_live_XXXX'; // <-- ваш ключ
const URL = 'https://api.captchacom.ru';
const EX = 'https://captchacom.ru/lk/examples';
(async () => {
// 1. Скачиваем эталонные картинки
const click = (await (await fetch(EX + '/click.png')).buffer()).toString('base64');
const task = (await (await fetch(EX + '/task.png')).buffer()).toString('base64');
// 2. Создаём задачу
let r = await fetch(URL + '/create', {
method:'POST',
headers:{'X-API-Key':API_KEY,'Content-Type':'application/json'},
body: JSON.stringify({type:'SmartCaptcha', click, task, app_id:0})
}).then(r => r.json());
if (r.status !== 1) return console.error(r);
const id = r.response;
console.log('task_id:', id);
// 3. Опрашиваем результат каждые 2с
for (let i = 0; i < 15; i++) {
await new Promise(r => setTimeout(r, 2000));
r = await fetch(URL + '/result', {
method:'POST',
headers:{'X-API-Key':API_KEY,'Content-Type':'application/json'},
body: JSON.stringify({id})
}).then(r => r.json());
if (r.status === 1) { console.log('OK:', r.response); break; }
if (r.response !== 'CAPCHA_NOT_READY') { console.error(r.response); break; }
}
})();<?php
$API_KEY = 'tc_live_XXXX'; // <-- ваш ключ
$URL = 'https://api.captchacom.ru';
$EX = 'https://captchacom.ru/lk/examples';
function api($url, $body, $key) {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["X-API-Key: $key", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode($body),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10
]);
return json_decode(curl_exec($ch), true);
}
// 1. Скачиваем эталонные картинки
$click = base64_encode(file_get_contents("$EX/click.png"));
$task = base64_encode(file_get_contents("$EX/task.png"));
// 2. Создаём задачу
$r = api("$URL/create", ['type'=>'SmartCaptcha','click'=>$click,'task'=>$task], $API_KEY);
if ($r['status'] != 1) { print_r($r); exit; }
$id = $r['response'];
echo "task_id: $id\n";
// 3. Опрашиваем результат каждые 2с
for ($i = 0; $i < 15; $i++) {
sleep(2);
$r = api("$URL/result", ['id' => $id], $API_KEY);
if ($r['status'] == 1) { echo "OK: {$r['response']}\n"; break; }
if ($r['response'] !== 'CAPCHA_NOT_READY') { echo "ERROR: {$r['response']}\n"; break; }
}API_KEY=tc_live_XXXX # <-- ваш ключ
EX=https://captchacom.ru/lk/examples
CLICK=$(curl -s $EX/click.png | base64 -w0)
TASK=$( curl -s $EX/task.png | base64 -w0)
# 1. Создаём задачу
TASK_ID=$(curl -s https://api.captchacom.ru/create \
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d "{\"type\":\"SmartCaptcha\",\"click\":\"$CLICK\",\"task\":\"$TASK\"}" \
| python3 -c 'import sys,json; print(json.load(sys.stdin)["response"])')
echo "task_id: $TASK_ID"
# 2. Опрашиваем результат
sleep 2
curl -s https://api.captchacom.ru/result \
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d "{\"id\":\"$TASK_ID\"}"