5

我使用 node-http-proxy 模块在 node.js 中创建了一个代理服务器。

看起来像这样:

var http = require('http'),
httpProxy = require('http-proxy'),
io = require("socket.io").listen(5555);

var proxy = new httpProxy.RoutingProxy();

http.createServer(function (req, res) {
     proxy.proxyRequest(req, res, {
         host: 'localhost',
         port: 1338
     });
}).listen(9000);

因此,我需要在将响应发送回客户端之前从我代理的服务器获取正文并对其进行分析。

但是我找不到可以获取此数据的事件或属性。我试过了:

proxy.on('end', function (data) {
    console.log('end');
});

但我不知道我们如何从中获得哑剧体。

4

3 回答 3

8

如果您只想检查响应(只读),您可以使用:

proxy.on('proxyRes', function(proxyRes, req, res){

    proxyRes.on('data' , function(dataBuffer){
        var data = dataBuffer.toString('utf8');
        console.log("This is the data from target server : "+ data);
    }); 

});

但是,请注意,发送响应后会发出“proxyRes”事件。

参考: https ://github.com/nodejitsu/node-http-proxy/issues/382

于 2014-11-21T11:46:58.290 回答
5

我找到了答案:我重写了 body 的响应函数 -

var http = require('http'),
    httpProxy = require('http-proxy'),
    io = require("socket.io").listen(5555);

var proxy = new httpProxy.RoutingProxy();

http.createServer(function (req, res) {
    console.log(req.url);
    res.oldWrite = res.write;
    res.write = function(data) {
        /* add logic for your data here */
        console.log(data.toString('UTF8'));
        res.oldWrite(data);
    }

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

}).listen(9000);

此代码将控制来自此端点的所有 url 请求和响应。

于 2013-03-06T06:25:50.820 回答
0

根据@Psycho 的回答,以下代码也可用于修改标头

var server = http.createServer(function(req, res) {

res.oldWrite = res.write;
res.write = function(data) {
    console.log(data.toString('UTF8'));
    res.oldWrite(data);
}

res.oldSetHeader = res.setHeader
res.setHeader = function(k,v) {
    console.log(k,v)
    res.oldSetHeader(k,v)
}

proxy.web(req, res, { target: proxyPool[key]}); })
于 2019-02-11T06:43:01.097 回答