我尝试设置一个代理服务器,该服务器应该从我访问的任何页面返回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);
但是当我访问不同的网站时,控制台中没有日志
答案 0 :(得分:1)
您可能需要将浏览器配置为使用代理服务器:
对于chrome,
我不确定您是否需要重新启动浏览器,但之后应将您的请求发送给代理。
以下是我为自己工作的一个例子:
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。