Node.js 从代理服务器获取响应
我使用node http代理模块在node.js中创建了一个代理服务器 看起来像这样:Node.js 从代理服务器获取响应,node.js,node-http-proxy,Node.js,Node Http Proxy,我使用node http代理模块在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.proxyReq
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');
});
但我不知道如何从中获取mime主体。我找到了答案:
我重写了身体的反应函数-
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请求和响应。如果您只想检查响应(只读),则可以使用:
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”事件是在发送响应后发出的
参考:
根据@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]}); })
这救了我的命。。。现场的实际记录非常差