http - 如何监听 Node http-proxy 流量?

标签 http node.js proxy

我正在使用 node-http-proxy .但是,除了中继 HTTP 请求外,我还需要监听传入和传出的数据。

拦截响应数据是我苦苦挣扎的地方。 Node 的 ServerResponse 对象(以及更一般的 WritableStream 接口(interface))不广播 'data' 事件。 http-proxy 似乎创建了它自己的内部请求,它会产生一个 ClientResponse 对象(它会广播 'data' 事件)但是这个对象不会在代理之外公开.

有什么想法可以解决这个问题而不用猴子修补 node-http-proxy 或在响应对象周围创建包装器吗?

最佳答案

Github 上 node-http-proxy 问题中的相关问题似乎暗示这是不可能的。对于其他人 future 的尝试,以下是我如何破解这个问题:

  • 您很快就会发现代理只调用了 writeHead()write()res 对象
  • 由于 res 已经是一个 EventEmitter,您可以开始发出新的自定义事件
  • 监听这些新事件以组装响应数据,然后使用它
var eventifyResponse = function(res) {
  var methods = ['writeHead', 'write', 'end'];
  methods.forEach(function(method){
    var oldMethod = res[method]; // remember original method
    res[method] = function() {   // replace with a wrapper
      oldMethod.apply(this, arguments); // call original method
      arguments = Array.prototype.slice.call(arguments, 0);
      arguments.unshift("method_" + method);
      this.emit.apply(this, arguments); // broadcast the event
    };
  });
};

res = eventifyResponse(res), outputData = '';

res.on('method_writeHead', function(statusCode, headers) { saveHeaders(); });
res.on('method_write',     function(data) { outputData += data; });
res.on('method_end',       function(data) { use_data(outputData + data); });
proxy.proxyRequest(req, res, options)

关于http - 如何监听 Node http-proxy 流量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741607/

相关文章:

http - 什么是可能的 golang http 响应错误?

mongodb - 如何在 Mongoose 中查询不同的值?

arrays - 检查数组是否包含angularjs中的值

security - 将 jwt 作为 GET 请求的查询参数放入 url 是否安全?

java - HTTP Put 设置内容类型

node.js - 如果 mongodb 类型是字符串,查询仅返回文档

c# - Xamarin Forms WebView 代理

node.js - 我真的需要代理来处理 Node.js 吗?

去编译错误?

iOS HTTP 发布 : Request Successful Connection; Nothing happens