- Home »

Создание HTTP клиента на Core HTTP в Node.js
В этой статье разберёмся, как создать свой HTTP-клиент на чистом Core HTTP в Node.js — без всяких axios, request и прочих модных обёрток. Почему это важно? Потому что иногда хочется полного контроля, минимальной зависимости от сторонних библиотек, а ещё — понимания, что происходит под капотом. Это пригодится, если вы настраиваете сервер, пишете автоматизацию, или просто хотите, чтобы ваши скрипты работали быстро и надёжно. Плюс, это отличный способ разобраться, как работает HTTP на самом низком уровне в Node.js, и научиться делать вещи, которые не всегда возможны с готовыми решениями.
Как это работает? — Краткий экскурс в Core HTTP
Node.js из коробки поставляется с модулем http
(и https
), который позволяет не только поднимать сервер, но и делать клиентские запросы. Это низкоуровневый API, который даёт полный контроль над каждым байтом, заголовком и телом запроса. В отличие от популярных библиотек, здесь всё максимально прозрачно: вы сами формируете запрос, обрабатываете ответ, ловите ошибки и даже можете управлять сокетами.
- Нет лишних зависимостей — меньше уязвимостей и обновлений.
- Максимальная гибкость — можно реализовать любые нестандартные фишки (например, кастомные методы, нестандартные заголовки, стриминг больших файлов).
- Отлично подходит для автоматизации, скриптов, интеграций между сервисами.
Но есть и обратная сторона: чуть больше кода, чуть меньше “магии”, и нужно самому следить за обработкой ошибок, таймаутами, редиректами и прочими нюансами HTTP.
Как быстро и просто всё настроить?
Всё, что нужно — Node.js (желательно последней LTS-версии, скачать можно здесь). Модуль http
уже встроен, ничего ставить не надо. Для HTTPS-запросов используйте https
— API почти идентично.
- Создайте новый файл, например,
http-client.js
. - Откройте редактор (VSCode, nano, vim — что угодно).
- Пишите код — ниже примеры.
- Запускайте:
node http-client.js
Вот базовый пример GET-запроса:
// http-client.js
const http = require('http');
const options = {
hostname: 'jsonplaceholder.typicode.com',
port: 80,
path: '/todos/1',
method: 'GET',
headers: {
'User-Agent': 'NodeCoreHttpClient/1.0'
}
};
const req = http.request(options, (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
console.log('Status:', res.statusCode);
console.log('Headers:', res.headers);
console.log('Body:', data);
});
});
req.on('error', (e) => {
console.error('Request error:', e);
});
req.end();
Для HTTPS меняем require('http')
на require('https')
и порт на 443.
Примеры, схемы, практические советы
Пример POST-запроса с телом
const https = require('https');
const postData = JSON.stringify({ title: 'foo', body: 'bar', userId: 1 });
const options = {
hostname: 'jsonplaceholder.typicode.com',
port: 443,
path: '/posts',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = https.request(options, (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
console.log('Status:', res.statusCode);
console.log('Body:', data);
});
});
req.on('error', (e) => {
console.error('Request error:', e);
});
req.write(postData);
req.end();
Обработка ошибок и таймаутов
В Core HTTP всё нужно делать руками. Вот как добавить таймаут:
req.setTimeout(5000, () => {
console.error('Request timed out!');
req.abort();
});
Положительные и отрицательные кейсы
Кейс | Core HTTP | axios/request |
---|---|---|
Минимальный размер скрипта | + | – |
Поддержка редиректов “из коробки” | – (нужно реализовать самому) | + |
Гибкость (нестандартные методы, кастомные сокеты) | + | +/- |
Простота кода | – | + |
Контроль над соединением (keep-alive, агенты) | + | + (но не всегда удобно) |
Зависимости | 0 | + |
Работа с потоками (stream) | + | + (но иногда сложнее) |
Рекомендации
- Для простых задач и автоматизации — Core HTTP идеален.
- Если нужно много “сахара” (редиректы, куки, автоматическая сериализация) — смотрите в сторону axios или request (deprecated, но всё ещё живой в старых проектах).
- Для микросервисов, где важна скорость и минимальный размер контейнера — Core HTTP вне конкуренции.
Команды и быстрый старт
Всё, что нужно для запуска:
# Установить Node.js (если не установлен)
# https://nodejs.org/en/download/
# Проверить версию
node -v
# Запустить скрипт
node http-client.js
Похожие решения, программы и утилиты
- Node.js HTTP/HTTPS API — официальная документация.
- axios — популярная обёртка, но с зависимостями.
- request — классика, но больше не поддерживается.
- got — современная альтернатива, но тоже не core.
- curl, httpie — для CLI, но не для Node.js-скриптов.
Статистика, сравнение с другими решениями
- Core HTTP — минимальный размер (0 зависимостей), скорость старта скрипта выше на 10-30% по сравнению с axios/got.
- axios/got — удобнее для сложных сценариев, но размер node_modules может вырасти на 10-20 МБ.
- Core HTTP — лучший выбор для контейнеров, embedded-решений, серверных скриптов, где важна скорость и минимализм.
Интересные факты и нестандартные способы использования
- Можно использовать Core HTTP для проксирования трафика, написания своих балансировщиков, даже для создания простых API-шлюзов.
- С помощью потоков (stream) можно качать огромные файлы, не загружая их целиком в память.
- Можно реализовать свой мини-curl на Node.js — удобно для автоматизации и тестирования серверов.
- Core HTTP позволяет реализовать нестандартные протоколы поверх HTTP (например, WebDAV, кастомные API).
Какие новые возможности открываются и чем это поможет в автоматизации и скриптах?
- Полный контроль над заголовками, телом, методами — можно автоматизировать любые задачи, интеграции, мониторинг.
- Можно писать свои healthcheck-скрипты для серверов, которые не зависят от сторонних библиотек.
- Легко интегрировать с системами CI/CD, писать свои алерты, проверки, деплой-скрипты.
- Возможность быстро деплоить и запускать на любом сервере — от VPS до выделенного железа (например, VPS или выделенный сервер).
- Можно собирать свои мини-агенты для сбора метрик, логирования, отправки данных на центральный сервер.
Вывод — заключение и рекомендации
Core HTTP в Node.js — это не только “олдскул”, но и мощный инструмент для тех, кто хочет полного контроля и минимализма. Если вы настраиваете сервер, пишете автоматизацию, или просто хотите понимать, как работает HTTP на самом низком уровне — это must-have в вашем арсенале. Да, придётся чуть больше кода, но взамен вы получаете гибкость, скорость и надёжность. Для сложных задач можно использовать обёртки, но для большинства серверных скриптов, healthcheck-ов, интеграций — Core HTTP вне конкуренции.
Рекомендую: попробуйте написать свой мини-клиент, интегрируйте его в свои скрипты, и вы удивитесь, насколько это просто и удобно. А если нужен сервер для экспериментов — смотрите VPS или выделенный сервер — там всё это отлично работает.
Прокачивайте свои скиллы, автоматизируйте всё, что можно, и не бойтесь лезть под капот — там много интересного!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.