Express Proxy Server,到 Proxy Fiddler

Express Proxy Server, to Proxy Fiddler

我有一个node.js express代理服务器,我想调试它,所以我想通过fiddler抓取流量:

const express = require('express');
const expressApp = express();
const proxyTarget = 'https://my-proxy.azurewebsites.net/proxy';

//attempting to configure fiddler proxy 
process.env.https_proxy= 'http://127.0.0.1:8888'
process.env.http_proxy= 'http://127.0.0.1:8888'
process.env.NODE_TLS_REJECT_UNAUTHORIZED=0;

expressApp.use('/api', proxy({
    target: proxyTarget,
    secure: false, // don't verify https certificates
    logLevel: 'debug'
}));

我尝试使用 fiddler 捕获流量,但 fiddler 不捕获对 Azure 的请求,只捕获本地主机上的包装代理请求。

如何配置代理设置以便首先通过 fiddler?

不幸的是,Node.js 不听取 http_proxy/https_proxy 环境变量(完整讨论参见 https://github.com/nodejs/node/issues/8381)。

这意味着这对于 Fiddler 来说很难 - 您需要更改发出 HTTP 请求的每个地方以使用代理设置,或者替换 Node 的 default agent to do so (and then ensure no requests set a custom agent). There are some node modules that can help here, like https://www.npmjs.com/package/global-agent,但您还需要处理 HTTPS 信任分开(或者你只会看到不可读的 CONNECT 请求,正如上面的评论者所提到的)。

不过我自己也遇到过同样的问题,所以我一直在构建 Fiddler 的开源替代品来修复它! HTTP Toolkit 可以做你正在寻找的事情:你可以从那里打开一个终端(或在现有终端中启用它)并且在那里启动的任何节点进程都会自动拦截所有 HTTP 和 HTTPS 请求,因此你可以检查and/or 重写它们,就像 Fiddler 一样。它也处理所有证书信任的东西。

在幕后,这只是将 node 包装在命令行上,以执行您手动执行的相同操作,重新配置设置和默认值以确保一切正常运行。如果您确实想手动执行此操作,完整的源代码位于此处:https://github.com/httptoolkit/httptoolkit-server/blob/master/overrides/js/prepend-node.js