4

我正在为用节点编写的应用程序构建一个小型开发人员工具(HUD)。在该工具中,我想显示为服务该页面而发出的所有 HTTP/HTTPS 请求(将它们显示给开发人员并记录它们的编号)。有没有一种干净的方法可以做到这一点,它不涉及包装类似的东西http.request()?如果不是,为了记录 HTTP 和 HTTPS,需要包装的最低级别的方法是什么?TCP连接怎么样?

4

1 回答 1

6

这个问题的答案取决于你的代码有多复杂。如果您对每个请求发出 3 或 4 个外部资源请求,则只需手动插入分析代码,这可能是最干净、最简单的解决方案。

如果您发出许多请求,猴子修补(包装)http.request并且https.request可以很容易地完成。

patcher = (patchMe) ->
  original = patchMe.request
  patchMe.request = (options, callback) ->
    console.log options.host, options.method # or any other counting, profiling
    original(options, callback)

http = require 'http'
https = require 'https'

patcher(http)
patcher(https)

如果您想要修补的不仅仅是这些请求,那么在 tcp/udp 级别上,不幸的是,您必须阅读源代码以找出可以修补的底层方法,我没有去过那里。

我喜欢阅读nodetime的源代码,它对函数进行了猴子补丁,require以在代码中更深入地分析特定函数/模块的任何使用。去阅读那个来源!:)

于 2012-07-28T10:50:25.137 回答