日常需求分析
在日常开发中,特别是前端开发工作人员,经常会需要针对某些http请求进行抓包或者拦截,对某一些域名进行转发。
针对日常需求分析,需求如下
- 支持请求转发
- 支持请求抓包
- 支持请求/响应拦截替换
- 支持多套配置
- 支持快速切换配置
工具方案比较
在工作中,无论是前端还是后端,在不同环境切换时,都会需要用上抓包工具或者转发工具。之前我使用过SwitchHost+Charles,使用switchHost来进行多个配置切换,charles用来实现抓包跟请求转发等switchHost无法满足的需求,但两个都有一定的痛点。
后来在周围同事的推荐下,我转去用了whistle,目前是whistle + SwitchyOmega配合一起使用。日常的转发抓包都是由whistle完成,SwitchyOmega则实现局部生效。
两套方案实现原理的比较

SwitchHost痛点
- 配置生效滞后:由于浏览器的socket连接缓存机制,配置切换不会立即生效
- 全局生效:有可能会影响你其他使用了相同域名的应用
- 功能单一:只支持域名级别的配置且仅支持域名ip配置,无法日常使用需求,这也是为什么我用Charles搭配使用的原因
Charles痛点
- 操作繁琐:要同时生效多个转发配置,需要一个一个手动输入,重复性真的无法忍受
- 兼容性:仅支持macOS
"whistle + SwitchyOmega" 的好处?
- 实时生效:whistle不会改变电脑上host文件,它本身就是一个代理服务器,可以按需使用,配合SwitchyOmega达到立即生效
- 局部生效:SwitchyOmega配置请求走whistle来达到转发目的,并且只对浏览器生效
- 功能丰富:whistle提供了丰富的匹配规则及http相关的拦截转发功能,能满足日常的需求
- 界面友好:能迅速支持批量配置,迅速切换,多套配置生效等
- 跨平台:whistle是基于node实现的代理服务器,可以在所有操作系统上使用。
上面的这些功能,也基本能满足日常开发需求的配置,当然,还有另外的方式能更好地实现不同环境的切换,这个就要从设计上走了,这个在这次不做讨论。
whistle安装启动
- whistle安装
- 安装node
- 通过npm包安装whistle:npm install -g whistle --registry=https://registry.npm.taobao.org
- whistle启动
- 查看版本(验证是否安装):w2 -V
- 启动(默认绑定端口8899):w2 start
- 通过打开或取消设置实现全局转发
- 安装SwitchyOmega实现局部生效
配置转发规则
- 在浏览器中输入 local.whistlejs.com/ 进入配置页面
- 在左上角选Rules tab切换到配置规则
- 域名IP映射配置:针对某个域名进行转发,ip或其他域名
- 精确链接匹配:只对某一条请求进行转发/拦截
- 前置链接匹配:根据配置的链接前缀,实现通用转发
- 正则匹配方式:根据正则去匹配链接并进行转发或拦截
- 拦截响应体:将请求响应体替换成本地的某个文件下的内容
- 支持多套规则同时生效

还有更多丰富的规则配置方法,可以参考官方文档
查看抓包
- 在浏览器中输入 local.whistlejs.com/ 进入配置页面
- 在左上角选Netwrok
开启https抓包
- 下载根证书并安装
- 设置证书信任
- 钩上启动拦截'Capture TUNNEL CONNECTs'配置
- 再看抓包页就可以看到https请求的内容了
其他系统可以参考链接配置:wproxy.org/whistle/web…
参考链接
- 官方文档:wproxy.org/whistle/