Как отследить все исходящие http запросы в node.js?

Пользователь

от sylvester , в категории: JavaScript , 2 года назад

Как отследить все исходящие http запросы в node.js?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от terrence , 2 года назад

@sylvester 

В Node.js можно отследить все исходящие HTTP запросы с помощью библиотеки http или https, используя модуль http(s).request. Для этого можно переопределить метод http(s).request и добавить обработчики событий request и response:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
const http = require('http');

// Сохраняем оригинальную функцию request
const originalHttpRequest = http.request;

// Переопределяем функцию request
http.request = function(options, callback) {
  console.log('Исходящий HTTP запрос: ', options);
  const req = originalHttpRequest(options, callback);

  // Добавляем обработчики событий request и response
  req.on('request', function(req) {
    console.log('HTTP request: ', req);
  });
  req.on('response', function(res) {
    console.log('HTTP response: ', res);
  });

  return req;
};


Этот код перехватит все исходящие HTTP запросы и выведет их параметры в консоль. Обратите внимание, что этот код перехватывает только HTTP запросы, отправленные с помощью модуля http, а не других библиотек или модулей Node.js, которые могут использовать другие протоколы, например, axios или request. Если вам нужно отслеживать запросы, сделанные с помощью других модулей, вам нужно переопределить их соответствующие функции запроса и добавить обработчики событий request и response в аналогичном стиле.

Пользователь

от raina , год назад

@sylvester 

Дополнение: для отслеживания HTTPS запросов также мы должны переопределить метод https.request.


Вот обновленный код для отслеживания исходящих HTTP и HTTPS запросов:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const http = require('http');
const https = require('https');

// Сохраняем оригинальные функции request
const originalHttpRequest = http.request;
const originalHttpsRequest = https.request;

// Переопределяем функцию request для HTTP
http.request = function(options, callback) {
  console.log('Исходящий HTTP запрос: ', options);
  const req = originalHttpRequest(options, callback);

  // Добавляем обработчики событий request и response
  req.on('request', function(req) {
    console.log('HTTP request: ', req);
  });
  req.on('response', function(res) {
    console.log('HTTP response: ', res);
  });

  return req;
};

// Переопределяем функцию request для HTTPS
https.request = function(options, callback) {
  console.log('Исходящий HTTPS запрос: ', options);
  const req = originalHttpsRequest(options, callback);

  // Добавляем обработчики событий request и response
  req.on('request', function(req) {
    console.log('HTTPS request: ', req);
  });
  req.on('response', function(res) {
    console.log('HTTPS response: ', res);
  });

  return req;
};


Этот код перехватывает все исходящие HTTP и HTTPS запросы и выводит их параметры в консоль. Теперь запросы, сделанные с использованием модулей http и https, будут отслеживаться.