这是做什么用的?
Whistle 是一个基于 Node.js 的跨平台网页调试代理——它能捕获并让你修改 HTTP、HTTPS、HTTP/2、WebSocket 和 TCP 流量,定位和 Charles、Fiddler 类似(这两者都在它的 GitHub 话题里)。
它是桌面应用,还是要在终端里运行的工具?
两者都是:在 macOS、Windows 和 Linux 桌面上有一个 Whistle 客户端,能省去大部分手动配置;服务器端则用 w2 命令来操作——不管哪种方式,抓包、规则和插件都在同一个内置界面里管理。
我怎么把它跑起来?
四步:npm i -g whistle(或 brew install whistle),用 w2 start 启动,用 w2 ca 安装 HTTPS 根证书,再用 w2 proxy 把流量指向它(w2 proxy 0 会关闭系统代理)。桌面用户用 Whistle 客户端可以跳过其中大部分步骤。
运行之前需要预先装点什么吗?
需要 Node.js——whistle 是以 npm 包的形式发布的,它的包配置要求 Node 14 或更新版本。在 macOS 上也可以用 Homebrew 来安装。
配置起来最麻烦的是哪一步?
HTTPS 抓包:必须安装 whistle 的根证书(w2 ca),而且系统会手动引导你完成——Windows 上要选“是”,macOS 可能会要求输入登录密码或使用触控 ID。
它能在哪些系统上运行?
macOS、Windows 和 Linux 桌面系统,其中明确点名支持 Ubuntu 和 Fedora;它并不绑定任何单一操作系统。
它能跑在没有图形界面的服务器上吗,还是必须要桌面环境?
可以——无头(headless)Linux 服务器环境是明确支持的;上面说的命令行安装方式正是为没有图形界面的机器设计的。
除了被动抓包,它还能做什么?
能做的很多:你可以通过规则配置改写请求和响应,用内置的 Composer 重发和编辑请求,用 Weinre 查看远程页面的 DOM,还能查看页面的控制台输出——全部都在同一个界面里完成。
如果我设不了系统代理,或者不想设,怎么办?
Whistle 还能作为 HTTP、HTTPS、Socks 或反向代理运行。README 推荐用 Chrome 扩展 ZeroOmega 在不同浏览器间切换代理,对于自身没有代理设置的应用,则推荐用 Proxifier。
我能扩展它,或者把它嵌到我自己的项目里吗?
可以——插件既能扩展规则也能扩展界面,而且 whistle 也可以作为 NPM 模块引入到项目里使用。
What are similar projects?
proxypin, nginx, goproxy, nginx-proxy, portless, http-proxy-middleware, mitmproxy, caddy
Which topics is it in?
debug, hosts, http2, mitm, http-proxy, proxy-server, https, devtools, reverse-proxy, debugging, node, websocket