Whistle 前端代理的实用安利、Node端抓包、插件分享

2,285 阅读4分钟

关于 Whitsle 的博客已有不少,本文想分享一点前端调试常用的功能与注意点

同时介绍下自己的 whistle.savefor-mock 懒人 mock 数据插件

准备

为什么是 Whistle

  • 免费、安装方便(npm i whistle -g
  • 代码式的配置
  • Values 工作区,直接在 Whistle 上编写 mock 数据,无需浏览器与 IDE 来回切换
  • 集成 log、weirne 等利于移动端调试的功能
  • ...

准备流程

mac 的代理在教程中是直接配置了网络偏好设置,但实践发现会导致 Apple 服务相关网络的异常,如 App Store 加载不出(白屏),备忘录同步失败等

因此更推荐使用 Google 插件(如 Proxy SwitchyOmega)来配置浏览器的代理,也更方便切换

常用功能安利

移动端代理

真机调试 h5 页面时,以往会在客户端中造 http://PC_IP:port/path 来访问 PC 本地前端的服务
但倘若同时有多个页面 url,当电脑的 IP 地址变更时,客户端中的各个页面入口 url 都需修改

不如将手机 wifi 代理到 PC,然后客户端访问的 url 直接使用测试环境域名,再由 Whitsle 转发到本地前端服务
如此在 IP 变更时只需修改手机 Wifi 的代理地址即可,同时还能在 Whistle 中通过注释转发规则来方便地切换 local / 测试环境

移动端调试

mock 数据

在后台接口未达到联调状态时,我们通常会在代码中写入 mock 数据,但这样对代码有侵入性,在提交公共仓库前还需对 mock 数据进行过滤,并且后续数据也不便保存,因此推荐统一使用代理工具进行 mock 数据

对业务需求中的 mock 数据,建立一个专用文件夹进行管理;对于常需要 mock 的接口,则在 Whistle 的 Values 工作区进行管理

更强大的是,Whistle 还能通过 script 脚本动态控制 mock 数据输出:whistle.vase
比如对前端常见的分页请求的接口,便可以根据 page 等参数来自动控制返回的数据内容

方便的配置参数

Whistle 提供了许多配置参数,在自测阶段非常实用:

  • resDelayreqSpeed:等用于模拟接口请求缓慢时,前端的表现情况
  • statusCode:模拟接口 404 等异常状态码的响应情形
  • jsAppend:向页面注入 js 脚本,对项目代码无入侵性地注入 vConsole 等调试工具脚本,同时还有 htmlAppendcssAppend
  • reqCors:用于解决代理调试时,可能因域名修改导致的跨域问题
  • ...

Node 端抓包

代理工具配置 PC 代理后,默认是抓不到 node 服务发出的请求(大部分时候是不需要的),需额外配置 node 端让其走代理服务

express

直接在 npm script 启动命令注入配置:
export http_proxy=http://127.0.0.1:8899 node app.js

egg

在 config.local 中配置 httpclient调试辅助):

config.httpclient = {
  request: {
    enableProxy: true,
    rejectUnauthorized: false,
    proxy: http://127.0.0.1:8899,
  },
};
request 等第三方模块

在其文档中找到对应代理配置项(proxy / agent / ..)设定即可

注意点

回环地址无法受理

通过 localhost 访问本地前端页面时,会发现 Whistle 完全抓不到包
这是因为回环地址发出的网络请求并不会到达真实的网络适配器,故一般抓包工具默认都无法(了解到 Wireshark 经过特殊配置后可以做到)

区分 url 替换与 host 配置

关于两者的区别参见 Whistle 作者的文章:whistle 中配 host 和 URL 替换的区别

这个问题的常见场景是微信 H5 的本地代理调试,规定可获得用户授权信息的页面 url,必须在微信公众平台配置的网页授权域名列表中
这就导致,用微信开发者工具调试时,若使用 URL 替换的方式(访问合法域名的 url,而后通过配置代理转发到本地服务),会得到“redirect_uri 参数错误”的提示
因此需要用 host 配置的方式进行代理

插件分享

whistle.savefor-mock 用于更方便地建立 mock 数据

代理原步骤

(在 Network 列表中找到对应 API 后)

  1. 右键保存 res body,重命名后点击下载
  2. 在下载目录找到后,剪切到统一存放 mock 数据的文件夹
  3. 复制 API url,粘贴到 Rules 中,加上 mock 文件路径,编写转发规则
  4. 用编辑器打开 mock 文件,进行改写
使用插件后
  1. 复制 API url,粘贴到 Rules 中,加上配置 savefor-mock://文件名
  2. 刷新页面,文件自动打开以供改写数据
  3. 回到 Whistle 粘贴新规则,done Kapture 2021-08-10 at 11.40.53 (1).gif

image.png