API: HTTP-запросы

Функции для выполнения HTTP-запросов к внешним сервисам и API.

Регистрация в C++: regWeb(js). Реализация: jsWeb.h + NetCurl.h (обёртка над libcurl).


http_get

http_get(url: string) → object

Выполняет HTTP GET-запрос.

Параметры:

Параметр Тип Описание
url string Полный URL, включая протокол (https://...)

Результат:

Поле Тип Описание
status number HTTP-код ответа (200, 404, 500 и т.д.)
body string Тело ответа
error string Сообщение об ошибке curl или ""

Пример:

let r = http_get("https://api.example.com/health");

if (r.error) {
    console.log("Ошибка запроса:", r.error);
} else if (r.status !== 200) {
    console.log("HTTP-ошибка:", r.status);
} else {
    let data = JSON.parse(r.body);
    console.log("Ответ:", JSON.stringify(data));
}

http_post

http_post(url: string, body: string, headers?: string[]) → object

Выполняет HTTP POST-запрос.

Параметры:

Параметр Тип Описание
url string Полный URL
body string Тело запроса (JSON, данные формы и т.д.)
headers string[] (опционально) Массив HTTP-заголовков

Формат заголовков:

["Content-Type: application/json", "Authorization: Bearer TOKEN"]

Результат:

Поле Тип Описание
status number HTTP-код ответа
body string Тело ответа
error string Сообщение об ошибке или ""

Примеры:

// Отправка JSON
let payload = JSON.stringify({ event: "alert", level: "critical" });
let r = http_post(
    "https://api.example.com/events",
    payload,
    ["Content-Type: application/json"]
);
console.log(r.status, r.body);

// С авторизацией
let r2 = http_post(
    "https://api.example.com/data",
    JSON.stringify({ value: 42 }),
    [
        "Content-Type: application/json",
        "Authorization: Bearer my_token_here"
    ]
);

// Без заголовков (например, данные формы)
let r3 = http_post(
    "https://example.com/form",
    "name=John&age=30"
);

Работа с вебхуками

Discord

let url = "https://discord.com/api/webhooks/ID/TOKEN";
let r = http_post(url, JSON.stringify({
    content: "Тревога! Сервис не работает."
}), ["Content-Type: application/json"]);
console.log(r.status);  // 204 = успех

Slack

let url = "https://hooks.slack.com/services/T.../B.../...";
let r = http_post(url, JSON.stringify({
    text: "Тревога! Сервис не работает."
}), ["Content-Type: application/json"]);
console.log(r.status);  // 200 = успех

Telegram

let token = "BOT_TOKEN";
let chatId = "CHAT_ID";
let text = encodeURIComponent("Тревога! Сервис не работает.");
let r = http_get(
    "https://api.telegram.org/bot" + token +
    "/sendMessage?chat_id=" + chatId + "&text=" + text
);
let resp = JSON.parse(r.body);
console.log(resp.ok);  // true = успех

Обработка ошибок

function safePost(url, payload, headers) {
    let r = http_post(url, payload, headers);

    // Сетевая ошибка (curl)
    if (r.error) {
        console.log("[ОШИБКА] Сетевая ошибка:", r.error);
        return false;
    }

    // HTTP-ошибка
    if (r.status < 200 || r.status >= 300) {
        console.log("[ОШИБКА] HTTP", r.status, ":", r.body);
        return false;
    }

    return true;
}

HTTP-коды ответов

Код Значение
200 OK
201 Created
204 No Content (успех вебхука Discord)
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
429 Too Many Requests (ограничение частоты запросов)
500 Internal Server Error