API: Solicitudes HTTP

Funciones para realizar solicitudes HTTP a servicios y APIs externos.

Registro en C++: regWeb(js). Implementación: jsWeb.h + NetCurl.h (envoltura sobre libcurl).


http_get

http_get(url: string) → object

Realiza una solicitud HTTP GET.

Parámetros:

Parámetro Tipo Descripción
url string URL completa incluyendo el protocolo (https://...)

Resultado:

Campo Tipo Descripción
status number Código de respuesta HTTP (200, 404, 500, etc.)
body string Cuerpo de la respuesta
error string Mensaje de error de curl o ""

Ejemplo:

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

if (r.error) {
    console.log("Error en la solicitud:", r.error);
} else if (r.status !== 200) {
    console.log("Error HTTP:", r.status);
} else {
    let data = JSON.parse(r.body);
    console.log("Respuesta:", JSON.stringify(data));
}

http_post

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

Realiza una solicitud HTTP POST.

Parámetros:

Parámetro Tipo Descripción
url string URL completa
body string Cuerpo de la solicitud (JSON, datos de formulario, etc.)
headers string[] (opcional) Array de cabeceras HTTP

Formato de cabeceras:

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

Resultado:

Campo Tipo Descripción
status number Código de respuesta HTTP
body string Cuerpo de la respuesta
error string Mensaje de error o ""

Ejemplos:

// Enviar 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);

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

// Sin cabeceras (ej. datos de formulario)
let r3 = http_post(
    "https://example.com/form",
    "name=John&age=30"
);

Trabajando con webhooks

Discord

let url = "https://discord.com/api/webhooks/ID/TOKEN";
let r = http_post(url, JSON.stringify({
    content: "¡Alerta! El servicio no funciona."
}), ["Content-Type: application/json"]);
console.log(r.status);  // 204 = éxito

Slack

let url = "https://hooks.slack.com/services/T.../B.../...";
let r = http_post(url, JSON.stringify({
    text: "¡Alerta! El servicio no funciona."
}), ["Content-Type: application/json"]);
console.log(r.status);  // 200 = éxito

Telegram

let token = "BOT_TOKEN";
let chatId = "CHAT_ID";
let text = encodeURIComponent("¡Alerta! El servicio no funciona.");
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 = éxito

Manejo de errores

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

    // Error de red (curl)
    if (r.error) {
        console.log("[ERROR] Error de red:", r.error);
        return false;
    }

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

    return true;
}

Códigos de respuesta HTTP

Código Significado
200 OK
201 Creado
204 Sin Contenido (éxito en webhook de Discord)
400 Solicitud Incorrecta
401 No Autorizado
403 Prohibido
404 No Encontrado
429 Demasiadas Solicitudes (límite de tasa)
500 Error Interno del Servidor