Временами полезно знать, какие именно заголовки отправляет HTTP клиент серверу, особенно во время отладки.
Приведенный ниже пример, позволяет простым способом решить данную задачу, с помощью встроенных модулей Node.js. Ровно тот случай, когда проще (и даже интереснее) написать элементарный «http сервер» самому, чем разбираться с готовыми продуктами — настраивать логи, устанавливать wireshark и тому подобное. Тем более «нода» сегодня очень популярна и наверняка уже установлена у многих программистов.
Я поддерживаю у себя домен .hm (home) для удобства разработки, дабы не путаться, отсюда и хост wisereport.hm
Давайте попробуем передать POST
> curl -d foo=bar wisereport.hm:3000
Got it! (request# 3)
Для удобства использования, каждый запрос имеет свой порядковый номер, который отправляется в качестве ответа и указывается в консоли. Таким образом вы не потеряетесь в списке данных при длительной работе.
//server.js const http = require('http'); const qs = require('querystring'); const port = 3000; var requestNumber = 1; const requestHandler = (request, response) => { console.log('\x1b[0m\n--------------------\n'); console.log('\x1b[93m%s %s \x1b[0m(request# %d) \n', request.method, request.url, requestNumber); for (var property in request.headers) { if (request.headers.hasOwnProperty(property)) { console.log('\x1b[32m%s: \x1b[0m%s', property, request.headers[property]); } } if (request.method !== 'GET') { var body = ''; request.on('data', (data) => { body += data; }); request.on('end', () => { console.log('\x1b[96m'); console.log(qs.parse(body)); }); } response.end('Got it! (request# ' + requestNumber + ')'); requestNumber++; } const server = http.createServer(requestHandler); server.listen(port, (err) => { if (err) { return console.log('something bad happened', err); } console.log(`server is listening on ${port}`); });
Для тех кто плохо знаком со «стрелочными функциями» (arrow functions), запись (foo) => {} тоже самое что function(foo){} если не вдаваться в подробности. Данный синтаксис поддерживается node.js начиная с версии 4.4.5, на момент написания данного поста, актуальная версия 8.9.1. Так же, arrow functions поддерживаются в ECMAScript 6.
Так же используется цветная подсветка текста в терминале — ANSI, например «\x1b[32m» — зеленый.
Разумеется, данный скрипт весьма простой и поэтому не блещет функционалом/защищенностью, но мы ведь не собираемся его использовать в продакшн, правда ведь? 😉
И да, он прекрасно работает в терминале Windows тоже.
root4root aka admin
Добавить комментарий
X