API: HTTP 요청

외부 서비스 및 API에 HTTP 요청을 보내기 위한 함수들입니다.

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("[ERROR] 네트워크 오류:", r.error);
        return false;
    }

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

    return true;
}

HTTP 응답 코드

코드 의미
200 성공
201 생성됨
204 내용 없음 (Discord 웹훅 성공)
400 잘못된 요청
401 인증 필요
403 접근 금지
404 찾을 수 없음
429 너무 많은 요청 (속도 제한)
500 내부 서버 오류