在 node.js 上调试所有 HTTP[S]

Debugging all HTTP[S] on node.js

我在完成某件事后感到很不舒服,在搜索 google & SO 之后,几天后我举起了手。尝试做一些我认为很常见的事情:在开发 node.js 应用程序时调试/检查所有 HTTP 流量。

在 Windows 中,它就像启动 Fiddler 一样简单,我可以看到来自所有进程的 all HTTP 和 HTTPS 流量。但是我已经将平台切换到 OSX 并尝试进行相同的工作。

我试过使用 Charles & MITMPROXY,但我看到的只是我的 node.js 应用的流量和响应。我的 node.js 应用正在调用外部服务,其中一些使用流行的 request package (which I have seen how to set that up) but also using other packages, like azure-storage。令我困扰的是,我无法让任何调试代理向我展示 azure-storage 包正在发送/接收到他们正在调用的端点。

从概念上讲,我想我明白了……我必须告诉这些不同的事情(比如 node.js、请求和 azure-storage)来通过这些工具中的每一个使用的代理……但是如何您可以在不修改其来源的情况下做到这一点吗?不能,就像 Fiddler 在 Windows 上的工作方式一样,你对 "all traffic goes through this proxy"?

做些什么

我会在 OSX 上使用 Fiddler,但在与 Telerik 交谈后,它目前无法正常工作,看不到 ETA。

所以我遇到的问题是我的想法...在我的特定实例中,我用来访问 Azure 存储的模块没有使用默认代理。我找到了一个包 (**global-tunnel that hijacked everything that used the request 包来控制它通过代理。现在我看到东西出现在我使用的 HTTP 调试器中。

现在的问题是,当我尝试访问 HTTPS 端点时...使用类似 Charles 的东西,它使用了它自己的 SSL 证书,Azure 不信任该证书,因此连接被拒绝。回到绘图板...