前端抓包转发工具whistle

6,035 阅读3分钟

日常需求分析

在日常开发中,特别是前端开发工作人员,经常会需要针对某些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或其他域名
  • 精确链接匹配:只对某一条请求进行转发/拦截
  • 前置链接匹配:根据配置的链接前缀,实现通用转发
  • 正则匹配方式:根据正则去匹配链接并进行转发或拦截
  • 拦截响应体:将请求响应体替换成本地的某个文件下的内容
  • 支持多套规则同时生效

还有更多丰富的规则配置方法,可以参考官方文档

查看抓包

开启https抓包

  • 下载根证书并安装
  • 设置证书信任
  • 钩上启动拦截'Capture TUNNEL CONNECTs'配置
  • 再看抓包页就可以看到https请求的内容了

其他系统可以参考链接配置:wproxy.org/whistle/web…

参考链接