API: Żądania HTTP

Funkcje do wykonywania żądań HTTP do usług zewnętrznych i interfejsów API.

Rejestracja w C++: regWeb(js). Implementacja: jsWeb.h + NetCurl.h (nakładka na libcurl).


http_get

http_get(url: string) → object

Wykonuje żądanie HTTP GET.

Parametry:

Parametr Typ Opis
url string Pełny adres URL wraz z protokołem (https://...)

Wynik:

Pole Typ Opis
status number Kod odpowiedzi HTTP (200, 404, 500, itp.)
body string Treść odpowiedzi
error string Komunikat błędu curl lub ""

Przykład:

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

if (r.error) {
    console.log("Błąd żądania:", r.error);
} else if (r.status !== 200) {
    console.log("Błąd HTTP:", r.status);
} else {
    let data = JSON.parse(r.body);
    console.log("Odpowiedź:", JSON.stringify(data));
}

http_post

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

Wykonuje żądanie HTTP POST.

Parametry:

Parametr Typ Opis
url string Pełny adres URL
body string Treść żądania (JSON, dane formularza, itp.)
headers string[] (opcjonalnie) Tablica nagłówków HTTP

Format nagłówków:

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

Wynik:

Pole Typ Opis
status number Kod odpowiedzi HTTP
body string Treść odpowiedzi
error string Komunikat błędu lub ""

Przykłady:

// Wysyłanie 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);

// Z autoryzacją
let r2 = http_post(
    "https://api.example.com/data",
    JSON.stringify({ value: 42 }),
    [
        "Content-Type: application/json",
        "Authorization: Bearer my_token_here"
    ]
);

// Bez nagłówków (np. dane formularza)
let r3 = http_post(
    "https://example.com/form",
    "name=John&age=30"
);

Praca z webhookami

Discord

let url = "https://discord.com/api/webhooks/ID/TOKEN";
let r = http_post(url, JSON.stringify({
    content: "Alert! Usługa nie działa."
}), ["Content-Type: application/json"]);
console.log(r.status);  // 204 = sukces

Slack

let url = "https://hooks.slack.com/services/T.../B.../...";
let r = http_post(url, JSON.stringify({
    text: "Alert! Usługa nie działa."
}), ["Content-Type: application/json"]);
console.log(r.status);  // 200 = sukces

Telegram

let token = "BOT_TOKEN";
let chatId = "CHAT_ID";
let text = encodeURIComponent("Alert! Usługa nie działa.");
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 = sukces

Obsługa błędów

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

    // Błąd sieciowy (curl)
    if (r.error) {
        console.log("[ERROR] Błąd sieci:", r.error);
        return false;
    }

    // Błąd HTTP
    if (r.status < 200 || r.status >= 300) {
        console.log("[ERROR] HTTP", r.status, ":", r.body);
        return false;
    }

    return true;
}

Kody odpowiedzi HTTP

Kod Znaczenie
200 OK
201 Utworzono
204 Brak treści (sukces webhooka Discord)
400 Nieprawidłowe żądanie
401 Nieautoryzowany
403 Zabroniony
404 Nie znaleziono
429 Zbyt wiele żądań (limit)
500 Wewnętrzny błąd serwera