whistle使用指南
whistle使用指南
- 一、whistle 简介
- 二、安装、启动、配置
- 2.1 安装 Node.js
- 2.2 安装 whistle
- 2.3 启动 whistle
- 2.4 配置代理 (推荐)
- 2.5 抓取 HTTPS 请求(可选)
- 2.5.2 信任 whistle 证书
- 2.5.3 验证抓取 HTTPS 请求
- 三、修改请求实例演示
- 3.1 修改请求
- 3.1.1 修改请求方法
- 3.1.2 修改请求头
- 3.1.3 修改请求体
- 3.2 修改响应
- 3.2.1 修改响应状态码
- 3.2.2 修改响应头部
- 3.2.3 修改响应体
- 四、总结
一、whistle 简介
whistle 是一款基于 Node.js 实现的,类似 Fiddler、Charles 的代理工具,可用于 HTTP、Websocket 等请求的抓取、编辑、重放等功能。
利用 whistle 的改包功能,在进行 HTTP(S) 请求时,可以轻松完成某些不具备测试条件或不易构造真实场景的测试工作,如异常场景、边界场景的测试等。
二、安装、启动、配置
2.1 安装 Node.js
由于 whistle 是基于 Node 实现的,因此需要预先安装 Node.js
Node.js官网( https://nodejs.org/zh-cn/ )
2.2 安装 whistle
通过 npm 包管理工具进行安装
npm install -g whistle
2.3 启动 whistle
安装好 whistle 后,打开命令行工具,执行如下启动命令
w2 start
启动成功后,会显示如下信息
【 whistle 成功启动状态 】
可通过访问本地端口访问 whistle 控制台
【 访问 whistle 页面 】
whistle 查看运行状态和停止命令分别如下
w2 status # 查看运行状态
w2 stop # 停止运行
2.4 配置代理 (推荐)
由于 whistle 是通过代理服务来进行工作的,因此需要给请求客户端配置 whistle 的代理,代理地址即 whistle 的监听地址(默认为 http://127.0.0.1:8899/ )。
在进行 Web 测试时,推荐结合 SwitchyOmega 等浏览器(适用Chrome、Firefox)代理插件来进行使用。如下图,在 Chrome 浏览器安装好扩展后,配置代理服务器为 whistle 地址,并将浏览器请求切换为 whistle 代理
【 SwitchyOmega 设置 whistle 代理情景模式 】
【 浏览器访问切换为 whistle 情景模式 】
此时浏览器发送的请求即可被 whistle 抓取
#
【 whistle 抓取浏览器请求记录 】
2.5 抓取 HTTPS 请求(可选)
抓取 HTTPS 请求仅需要进行证书配置,其余步骤与抓取 HTTP 相同。以下介绍 HTTPS 配置方法
2.5.1 下载 whistle 证书 & 开启抓取 HTTPS 请求
在 whistle 控制台点击 【Network】-【 HTTPS 】选项,点击下载 CA 证书,并且勾选抓取 TUNNEL 请求(部分版本为 HTTPS 请求),如下图
【 whistle 配置开启抓取HTTPS请求 】
2.5.2 信任 whistle 证书
由于 whistle 证书为自签证书,因此需要配置本地机器信任证书,否则浏览器会因为证书不安全而拦截 whistle 代理的 HTTPS 请求。
Mac 配置:
打开【钥匙串】(或默认打开下载的证书),右上角搜索 whistle 证书,然后右键证书弹出框中选择【显示简介】,在【信任】-【使用此证书时】选择 “始终信任” 即可,如下图
【 Mac 信任 whistle 证书 】
Windows 配置:
下载完证书后,双击打开,在对话框中点击【安装证书】,并将证书存储到 “受信任的根证书颁发机构”,确认完成即可,(Win10 配置)如下图
【 Windows10 信任 whistle 证书 】
2.5.3 验证抓取 HTTPS 请求
完成上述两个步骤后,浏览器发起 HTTPS 请求,查看 whistle 控制台,可以看到正常抓取到 HTTPS 请求
【 抓取 HTTPS 请求 】
三、修改请求实例演示
修改请求内容通常需要经过如下过程:
Values:
values 中允许自定义变量,以供在定义修改包内容时进行引用。
Rules:
Rules 即定义修改包内容规则。
根据上面修改请求、响应的过程,下面简单演示几种常用修改包内容(完整的修改内容支持请参考 whistle 文档)。
3.1 修改请求
3.1.1 修改请求方法
修改请求方法模式如下
pattern method://newMethod
如
kyfw.12306.cn method://post
【 修改请求方法 】
如下在浏览器发起请求时,通过开发者工具抓包发现原始请求方法为 GET
【 浏览器原始请求方法 】
请求经过 whistle 修改后,查看请求包内容,发现请求匹配模式站点的请求方法由 GET 改为 POST,如下图
【 请求方法经过 whistle 修改 】
3.1.2 修改请求头
修改请求头模式如下
pattern reqHeaders://{values}
如
kyfw.12306.cn reqHeaders://{new_headers}
其中引用到的 values 变量 new_headers 定义如下
test-header1: value1
upgrade-insecure-requests: 10
【 头部引用变量 new_headers 定义 】
【 浏览器原始请求头部 】
发起请求后,查看 whistle 抓包内容,对应头部发生改变,如下图
【 请求头部经过 whistle 修改 】
3.1.3 修改请求体
修改请求体模式如下
pattern reqBody://{values}
如
kyfw.12306.cn reqBody://{new_reqBody}
引用变量 new_reqBody 定义如下
my new reqbody
发起请求后,抓起浏览器原始请求如下
【 浏览器原始无 body 请求包 】
whistle 抓取经修改后请求包内容如下
【 body 经过 whistle 修改请求包 】
3.2 修改响应
3.2.1 修改响应状态码
修改响应状态码模式如下
pattern statusCode://code
或
pattern replaceStatus://code
两者区别为,设置 statusCode 后不再发送请求,直接返回设置的状态码;而 replaceStatus 继续进行请求,并对响应的状态码进行替换。下面以 statusCode 为例,如
kyfw.12306.cn statusCode://500
修改状态码后,查看 whistle 及浏览器包内容均显示为修改的状态码
【 whistle 抓取修改响应状态码请求包 】
【 浏览器抓取原始请求包 】
3.2.2 修改响应头部
修改请求体模式如下
pattern resHeaders://{values}
如
kyfw.12306.cn resHeaders://{new_resHeaders}
引用变量 new_resHeaders 定义如下
test-res-header: felix-test
【 自定义响应头部引用变量 new_resHeaders 定义 】
抓取请求内容,响应头部中包含 whistle 修改的内容
【 响应头部包含 whistle 修改内容 】
3.2.3 修改响应体
修改请求体模式如下
pattern resBody://{values}
如
kyfw.12306.cn resBody://{new_resBody}
引用变量 new_resBody 定义如下
my response body
【 自定义响应体引用变量 new_resBody 定义 】
发起请求后抓取请求包内容,发现接口到响应 body 为修改后的内容
【 请求响应体为 whistle 修改内容 】
四、总结
- 跨平台性
得益于 Node.js 的跨平台性,whistle 在 Windows、Mac、Linux 均可以运行,相比于 Fiddler、Charles 等客户端工具而言,有更好的系统兼容性,降低了使用者在不同系统间的学习和使用成本,满足用户一个工具打天下的需求。
- 使用简单
whistle 所有安装配置工作可在5分钟之内完成(不考虑网络下载等因素影响),同时 whistle 具备详细的帮助说明文档,极大降低了用户上手的门槛,对初学者非常友好。
whistle使用指南相关推荐
- Whistle安装及使用指南
一.Whistle安装.配置及启动 1.安装Node.js Whistle是基于Node实现的,Node.js官网:Node.js 2.安装Whistle 不同用户安装详情:安装启动 · GitBoo ...
- ux设计_声音建议:设计UX声音的快速指南
ux设计 Mating calls, warning grunts, and supportive coos are some of the sounds heard throughout the a ...
- 超详细中文预训练模型ERNIE使用指南-源码
作者 | 高开远,上海交通大学,自然语言处理研究方向 最近在工作上处理的都是中文语料,也尝试了一些最近放出来的预训练模型(ERNIE,BERT-CHINESE,WWM-BERT-CHINESE),比对 ...
- 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题
入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...
- ASIC设计-终极指南
ASIC设计-终极指南 ASIC Design – The Ultimate Guide ASIC设计-终极指南 ASICs代表特定于应用的集成电路,指的是针对特定应用而设计的半导体解决方案,与其他解 ...
- Python神经网络集成技术Guide指南
Python神经网络集成技术Guide指南 本指南将介绍如何加载一个神经网络集成系统并从Python运行推断. 提示 所有框架的神经网络集成系统运行时接口都是相同的,因此本指南适用于所有受支持框架(包 ...
- 深度学习框架集成平台C++ Guide指南
深度学习框架集成平台C++ Guide指南 这个指南详细地介绍了神经网络C++的API,并介绍了许多不同的方法来处理模型. 提示 所有框架运行时接口都是相同的,因此本指南适用于所有受支持框架(包括Te ...
- HTML5与CSS3权威指南之CSS3学习记录
title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...
- Maven入门指南⑦:Maven的生命周期和插件
Maven入门指南⑦:Maven的生命周期和插件 一个完整的项目构建过程通常包括清理.编译.测试.打包.集成测试.验证.部署等步骤,Maven从中抽取了一套完善的.易扩展的生命周期.Maven的生命周 ...
最新文章
- ubuntu11.04下CUDA4.0的安装与配置
- Python自动化运维之高级函数
- 重磅!Yolo v4横空出世!刚刚开源!
- uban系统如何安装java_Ubuntu系统下安装Java并配置环境
- Integer转BigDecimal
- (个人备忘)多人开发 no file directory.....的问题
- 除了写代码,程序员还能做哪些副业呢?
- java后端面试经验(自用收藏)
- cs231n学习笔记 CNN 目标检测 定位 分割
- ArcGIS中地理配准与空间校正的不同
- RK3588 实现温控风扇之获取cpu温度(一)
- MapGuide 初步
- vue实现带样式的textarea输入框,contenteditable属性应用
- Win7/Win10双系统安装方法图文教程
- c++的内存管理(raii->shart_ptr->垃圾回收)
- scipy butter 滤波器实现
- java学习第6天,今天是循环结构
- 解决Connections could not be acquired from the underlying database!
- 电脑如何一键安装win10系统?
- Oracle数据库学习笔记(九)--scott用户
热门文章
- DevOps峰会 | 研发效能实践助力互联网行业项目管理“行之有效”
- 服务器2008 r2开启远程桌面连接不上,windows server 2008 R2怎么开启远程桌面_windows server 2008 R2开启远程桌面的步骤...
- ZigBee技术简介 -- ZigBee技术优势
- NVDIA CUDA安装失败解决方案最新版(2021.10.8)
- 牌型种数 ----蓝桥杯(暴力方法)
- 《惢客创业日记》2019.03.30(周六)遗留工作进入收尾阶段
- 汽车二自由度相关数学表达式(持续更新)
- OA无纸化政府办公原笔迹电子签名解决方案
- Matlab:绘制琼斯矩阵的偏振图像
- SAP_销售发票VF01开放可人工修改定价金额