API : Requêtes HTTP

Fonctions pour effectuer des requêtes HTTP vers des services et API externes.

Enregistrement C++ : regWeb(js). Implémentation : jsWeb.h + NetCurl.h (wrapper autour de libcurl).


http_get

http_get(url: string) → object

Effectue une requête HTTP GET.

Paramètres :

Paramètre Type Description
url string URL complète incluant le protocole (https://...)

Résultat :

Champ Type Description
status number Code de réponse HTTP (200, 404, 500, etc.)
body string Corps de la réponse
error string Message d'erreur curl ou ""

Exemple :

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

if (r.error) {
    console.log("Erreur de requête :", r.error);
} else if (r.status !== 200) {
    console.log("Erreur HTTP :", r.status);
} else {
    let data = JSON.parse(r.body);
    console.log("Réponse :", JSON.stringify(data));
}

http_post

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

Effectue une requête HTTP POST.

Paramètres :

Paramètre Type Description
url string URL complète
body string Corps de la requête (JSON, données de formulaire, etc.)
headers string[] (optionnel) Tableau d'en-têtes HTTP

Format des en-têtes :

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

Résultat :

Champ Type Description
status number Code de réponse HTTP
body string Corps de la réponse
error string Message d'erreur ou ""

Exemples :

// Envoyer du 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);

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

// Sans en-têtes (ex. données de formulaire)
let r3 = http_post(
    "https://example.com/form",
    "name=John&age=30"
);

Utilisation avec les webhooks

Discord

let url = "https://discord.com/api/webhooks/ID/TOKEN";
let r = http_post(url, JSON.stringify({
    content: "Alerte ! Le service est hors ligne."
}), ["Content-Type: application/json"]);
console.log(r.status);  // 204 = succès

Slack

let url = "https://hooks.slack.com/services/T.../B.../...";
let r = http_post(url, JSON.stringify({
    text: "Alerte ! Le service est hors ligne."
}), ["Content-Type: application/json"]);
console.log(r.status);  // 200 = succès

Telegram

let token = "BOT_TOKEN";
let chatId = "CHAT_ID";
let text = encodeURIComponent("Alerte ! Le service est hors ligne.");
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 = succès

Gestion des erreurs

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

    // Erreur réseau (curl)
    if (r.error) {
        console.log("[ERREUR] Erreur réseau :", r.error);
        return false;
    }

    // Erreur HTTP
    if (r.status < 200 || r.status >= 300) {
        console.log("[ERREUR] HTTP", r.status, ":", r.body);
        return false;
    }

    return true;
}

Codes de réponse HTTP

Code Signification
200 OK
201 Créé
204 Pas de contenu (succès webhook Discord)
400 Requête incorrecte
401 Non autorisé
403 Interdit
404 Non trouvé
429 Trop de requêtes (limite de débit)
500 Erreur interne du serveur