whistle是什么?
抓包工具?代理工具?调试工具?它都是。
whistle是基于Node实现的跨平台web调试代理工具,有以下基本功能:
- 查看HTTP、HTTPS请求响应内容
- 查看WebSocket、Socket收发的帧数据
- 设置请求hosts、上游http/socks代理
- 修改请求url、方法、头部、内容
- 修改响应状态码、头部、内容,并支持本地替换
- 修改WebSocket或Socket收发的帧数据
- 内置调试移动端页面的weinre和log
- 作为HTTP代理或反向代理
- 支持用Node编写插件扩展功能
简单来说,
- 它集成了weinre,可以远程调试查看dom结构(不知道weinre?一个可以在pc端查看dom结构端调试工具)
- 可以替代charles做抓捕
- 可以替代nginx的部分功能做代理
- 可以帮助在任意页面中插入脚本(比如vconsole、eruda),很方便调试线上bug
有了whistle,移动端调试的问题迎刃而解
相较于PC侧,在移动端调试网页,主要会遇到以下三个问题:
- 没有Console,无法查看页面的js错误及通过 console.xxx 输出的调试日志 (vconsole/eruda可以解决,需要在页面中插入脚本)
- 无法查看、修改页面的DOM结构及样式(weinre可以解决,需要在页面中插入脚本)
- 无法debug(charles可以解决)
而且调试线上问题,你也没办法说修改线上代码注入调试需要的工具吧?而且很耦合。
而利用whistle,无需在项目中插入脚本,即可解决上述问题;
下面的部分需要你先安装whistle,如果你没有安装,请先按照whistle引导安装启动
- 安装Node
npm install -g whistle
安装whistlew2 start
启动whistle- 配置代理
- 安装根证书
利用whistle查看页面的js错误及通过 console.xxx 输出的调试日志
注意: 如果调试https页面,先在whistle上开启https拦截
- 在rules中配置
m.baidu.com log://
,control/command + s
保存后即可在访问m.baidu.com时,在whistle右侧log面板看到m.baidu.com页面输出的日志。 插入脚本
如果你想同时注入js脚本,可以在rules配置:1
2
3
4
5
6# 在mac或linux加载本地js文件/User/xxx/test.js
m.baidu.com log:///User/xxx/test.js
# 在windows上加载本地js文件D:\xxx\test.js
m.baidu.com log://D:\xxx\test.js
# 直接从whistle的Values配置的key-value里面获取脚本
m.baidu.com log://{test.js}whistle的Values参见:https://avwo.github.io/whistle/webui/values.html
利用whistle查看、修改页面的DOM结构及其样式
whistle集成了weinre的功能,同样只需配置一条规则即可通过在pc上通过weinre修改网页的DOM结构及其样式:
1 | m.baidu.com weinre://test |
test只是作为weinre的分类,从whistle顶部的weinre入口即可进入weinre,调试远程m.baidu.com页面
利用whistle注入vConsole
vConsole是微信团队开发的轻量、可拓展、针对手机网页的前端开发者调试面板,主要原理是通过在页面注入js实现模拟PC浏览器的Console功能,这边利用whistle的js协议往指定网页(https://m.baidu.com/)注入vConsole.js,配置whistle规则:
1 | m.baidu.com js://{vConsole.js} |
注意: vConsole和weinre不能同时使用