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、
- 转到设置,
- 搜索 "proxy"、
- 点击"change proxy settings",
- 点击局域网设置,
- 然后添加有关您的代理服务器的信息。
我不确定你是否需要重新启动浏览器,但你的请求应该会在之后发送到代理。
这是我为自己工作的一个例子:
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。
我正在尝试设置一个代理服务器,它应该 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、
- 转到设置,
- 搜索 "proxy"、
- 点击"change proxy settings",
- 点击局域网设置,
- 然后添加有关您的代理服务器的信息。
我不确定你是否需要重新启动浏览器,但你的请求应该会在之后发送到代理。
这是我为自己工作的一个例子:
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。