Whistle安装及使用指南
Whistle 是基于 Node.js 的工具,支持通过代理抓取网络请求。以下是其核心功能和使用步骤的摘要:
安装与启动
安装 Node.js:通过 Node.js 官网下载安装。
安装 Whistle:通过 npm 安装 whistle,可选择不同用户安装详情。
启动 Whistle:使用命令 npm install -g whistle 后,启动命令为 w2 start,重启为 w2 restart,关闭为 w2 stop。
配置浏览器代理
代理地址默认为 http://127.0.0.1:8899/。
推荐使用 SwitchyOmega 浏览器插件配置代理服务器。
抓取 HTTPS 请求
下载证书:通过 Whistle 控制台下载 HTTPS 根证书。
配置证书:安装证书并确保受信任的根证书颁发机构。
验证抓取:检查抓取的 HTTPS 请求。
实例演练
修改请求方法:使用规则 pattern method://newMethod,newMethod 不区分大小写。
修改请求头:使用规则 pattern reqHeaders://{newHeader},newHeader 可引用 values 变量。
修改请求体:使用规则 pattern reqBody://{reqbody},reqbody 引用 values 变量。
延迟请求:规则 pattern reqDelay://time。
请求速度:规则 pattern reqSpeed://kbs。
修改响应状态码:规则 replaceStatus 或 statusCode。
修改返回参数:使用 rawfile 模式,response 引用 values 变量。
请求替换:配置模式匹配多个 URL。
禁用缓存:规则 disable://cache。
绑定 host:配置 ip pattern。
转换 http 协议:配置 http://localhost:port。
mock 数据:通过插件生成数据,支持 HTML 模板语法。
Whistle 提供强大的抓包和调试功能,支持多种协议转换和数据模拟,适合网络协议分析和测试。
一、Whistle安装、配置及启动
1、安装Node.js
Whistle采用Node.js框架,Node.js官网:Node.js
2、安装Whistle
不同用户安装的详细信息:安装启动 · GitBook
在cmd.exe窗口中打开,然后通过npm工具进行安装,安装命令为:npm install -g whistle。
3、启动Whistle:w2 start
启动成功界面:

通过访问本地端口访问whistle Web控制台:http://127.0.0.1:8899/

Whistle常用命令:
启动:w2 start
重启:w2 restart
关闭:w2 stop
4、配置浏览器代理(推荐)
whistle 是通过代理服务来工作的,因此需要对请求客户端配置 whistle 的代理,代理地址即 whistle 的监听地址,后者默认设置为 http://127.0.0.1:8899/。
建议采用SwitchyOmega插件进行浏览器导航。安装扩展程序后,将代理服务器配置为whistle地址,并将浏览器请求切换至whistle代理服务器。

SwitchyOmega - 情景模式
在满足需求的情况下,可以新增所需模式。例如,whistle模式在使用时,可以选择一个单独的情景模式,也可以选择自动切换模式。
auto switch:可同时支持多个规则,编写完规则后点击【应用选项】,即可使用

采用whistle模式或默认采用whistle自动切换后,此时浏览器发出的请求将被whistle进行抓取。
5、抓取 HTTPS 请求
1)下载whistle证书 & 开启HTTPS 请求抓取
HTTPS
HTTPS
勾选【Capture TUNNEL CONNECTs】进行HTTPS 请求抓取

2)信任whistle配置
请完成以下步骤:首先获取whistle证书文件,随后完成证书安装步骤,最后将证书存储至...,其中...为受信任的根证书颁发机构。完成所有步骤后即可。

3)验证抓取 HTTPS 请求

6、移动端调试
在移动设备调试过程中,whistle和移动端必须确保两者位于同一局域网内,并且移动端需要配置whistle的代理服务器位置。
IOS:
whistle 控制台 —> 【HTTPS】扫描二维码,下载证书,
Android :
whistle 控制台 —> 【HTTPS】扫描二维码,下载证书,去设置中进行安装
二、实例演练:
修改请求方法
pattern:域名或者路径
Rules规则:
pattern method://newMethod
newMethod:不区分大小写


修改请求头Header
1)Rules规则:
pattern reqHeaders://{newHeader}

2)newHeader为引用的values 变量

3)发起请求后,查看whistle抓包请求对应的Header改变,如图所示:
改变前:

改变后:

修改请求体:
1)Rules规则:
pattern reqBody://{req_body}

2)req_body为引用的values 变量

延迟请求(ms)
Rules规则:
pattern reqDelay://time
Example:
baidu.com reqDelay://60000
请求速度(kb/s)
Rules规则:
pattern reqSpeed://kbs
Example:
baidu.com reqSpeed://256
修改响应状态码
两个方法:
1)Rules规则:
pattern replaceStatus://code
说明:使用 replaceStatus 继续进行请求,并对响应的状态码进行替换;

修改状态码后,whistle及浏览器均显示为修改后的状态码

2)Rules规则:
pattern statusCode://code
说明:使用 statusCode 后不再发送请求,直接返回设置的状态码。
修改返回参数
1)Rules规则:
/pattern/ rawfile://{response}
2)response为引用的values 变量
如果报文头出现:content-encoding: gzip,则需要去掉
请求替换
Rules规则中配置模式如下:
pattern http://host:port/xxx
Example:
https://jd.com https://baidu.com/
jd.com baidu.com
www.js www.kk.js
禁用请求的缓存,只要经过代理且匹配到的请求都不会使用缓存
注:跟 cache 协议的区别是,cache 只是用来设置响应的缓存头
pattern disable://cache
绑定host
注:相当于浏览器层的host文件,如果找不到再去查找本机的host文件
ip pattern
Example:
127.0.0.1 baidu.com
转换http协议
注:采用转发协议及域名转发策略,使得本地环境能够轻松实现 https 通信。在线上的 https 域名实际上对应的是本地服务器上的 http 调试端口。
pattern http://localhost:port
Example:
https://baidu.com http://localhost:8080
mock数据
whistle 配备了一个功能强大的 mock 数据插件,能够配合 js 语句和 mock 语法生成数据。
mock语法详解:https://github.com/nuysoft/Mock/wiki/Syntax-Specification
注释:在数据模板中,生成规则和属性值都需要使用双引号,"name|rule"。
1)安装插件:
npm i -g whistle.vase
2) Plugins 菜单:
打开 【vase】的界面,新建一个mock数据的配置,并选择模板Engine: mock


结果展示:

