Node.js http-proxy流量监控

时间:2017-05-10 07:50:15

标签: javascript node.js proxy node-http-proxy

我尝试设置一个代理服务器,该服务器应该从我访问的任何页面返回http requests

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

enter image description here

这是否可以使用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);

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

1 个答案:

答案 0 :(得分:1)

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

对于chrome,

  1. 转到设置,
  2. 搜索“proxy”,
  3. 点击“更改代理设置”,
  4. 点击局域网设置,
  5. 然后添加有关代理服务器的信息。
  6. 我不确定您是否需要重新启动浏览器,但之后应将您的请求发送给代理。

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

    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。