Node.js http代理流量监控

Node.js http-proxy traffic monitoring

我正在尝试设置一个代理服务器,它应该 return 来自我正在访问的任何页面的 http requests

基本上,如果我导航到 www.google.com,那么我希望收到以下请求:

这可以使用 node-http-proxy 模块实现吗?

我尝试了以下代码,但无法弄清楚如何获取请求..

var http = require('http'),  
    httpProxy = require('http-proxy');

//
// Create a proxy server with custom application logic
//
httpProxy.createServer(function (req, res, proxy) {  
  //
  // Put your custom server logic here
  //

  proxy.proxyRequest(req, res, {
    host: 'localhost',
    port: 9000
  });
}).listen(8000);

http.createServer(function (req, res) {  
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.write('request successfully proxied: ' + req.url +'\n' + JSON.stringify(req.headers, true, 2));
  res.end();
}).listen(9000);

更新:
我将你的浏览器配置为使用我的代理服务器,并将代码更改如下:

var http = require('http'),
    httpProxy = require('http-proxy');

//
// Create a proxy server with custom application logic
//
var proxy = httpProxy.createServer(function (req, res, proxy) {  
  //
  // Put your custom server logic here
  //
  proxy.proxyRequest(req, res, {
    host: 'localhost',
    port: 9000
  });
})

proxy.listen(8000);

proxy.on('proxyReq', function(proxyReq, req, res, options) {
  console.log(req.url);
  console.log(proxyReq.url);
});

http.createServer(function(req, res) {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.write('request successfully proxied: ' + req.url +'\n' + JSON.stringify(req.headers, true, 2));
  res.end();
}).listen(9000);

但是访问不同的网站时控制台没有日志

您可能需要配置浏览器才能使用代理服务器:

对于chrome、

  1. 转到设置,
  2. 搜索 "proxy"、
  3. 点击"change proxy settings",
  4. 点击局域网设置,
  5. 然后添加有关您的代理服务器的信息。

我不确定你是否需要重新启动浏览器,但你的请求应该会在之后发送到代理。

这是我为自己工作的一个例子:

var httpProxy = require('http-proxy');
//
// Http Proxy Server with bad target
//
var proxy = httpProxy.createServer({
  target:'http://localhost:9005' 
});

proxy.listen(8005);

var http = require('http');
//
// Create your target server
//
http.createServer(function (req, res) {
  var options = {
    target: 'http://'+req.headers.host
  };
  console.log(req.url)
  console.log(req.headers.host)
  req.host = req.headers.host;
  proxy.web(req, res, options, function(err){console.log('err', err)}); // errorCallback is optional
}).listen(9005);

proxy.on('proxyReq', function (proxyReq, req, res) {
  console.log('request url', JSON.stringify(req.url, true, 2));
});

目前仅适用于 http。