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 | 내부 서버 오류 |