gpt4 book ai didi

用于监控网络请求和响应的 Node.js 代理

转载 作者:可可西里 更新时间:2023-11-01 16:42:42 24 4
gpt4 key购买 nike

我正在使用 Nodejitsu 的 http 代理构建一个工具来监控网络流量。

httpProxy.createProxyServer({
target: 'http://localhost:9000'
})
.listen(8000);

util.puts('proxy server listening on port 8000');


http.createServer(function targetServer(req, res) {
res.writeHead(302, { 'Location': req.headers.host });
util.puts('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2));

res.end();

})
.listen(9000);

util.puts('target server listening on port 9000');

我想做的是

  1. 代理从客户端(浏览器)到我的目标服务器的传出请求
  2. 将它们从我的目标服务器发送到它们的原始目标 url
  3. 在我的目标服务器上接收响应
  4. 将响应发送回客户端

基本上在客户端和目标服务器之间放置了一个中间人,这样我就可以监控流量。但是,当我尝试这样做时,只要发出 302 请求,就会收到 ECONN 错误。

Error: connect ECONNREFUSED
at errnoException (net.js:901:11)
at Object.afterConnect [as oncomplete] (net.js:892:19)

谁能帮我弄清楚这是怎么回事

更新

我像这样更改了 302 Location 参数:

res.writeHead(302, { 'Location': '/' });

现在,当浏览器尝试访问我的代理服务器时,它会进入重定向循环。为什么会这样?

最佳答案

如果您打算用代理的服务器 ip 替换 dns 查询,这是可能的 - 仅在非 ssl 时有效,因为每个域的证书无效。否则我不知道它应该如何工作。这是一个例子:

const httpProxy = require('http-proxy');
const http = require('http');

var proxy = httpProxy.createProxyServer();

var server = http.createServer(function(req, res) {
proxy.web(req, res, {
target: 'http://' + req.headers.host + req.url
});
console.log('Yay, got it routed through my proxy.');
console.log(req.connection.remoteAddress + '--->' + req.headers.host);
});

proxy.on('end', function(req, res) {
console.log(req.connection.remoteAddress + '<---' + req.headers.host);
// Do some nasty tracking and monitoring
});

server.listen(8000);

如果您正在尝试监视传出请求,则 Dns 查询必须指向此服务器。

关于用于监控网络请求和响应的 Node.js 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26310708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com