抓包就指着它了——whistle提升前端开发幸福感的利器
ztj100 2025-01-13 19:18 10 浏览 0 评论
前言
好多人认为whistle是抓包工具,殊不知抓包只是whistle能力的冰山一角。除了抓包外,它还能修改请求与响应、真机调试h5移动端、解决跨域、域名映射等等等。总而言之,使用whistle能够提升我们的开发效率,改善开发体验。
whistle一出手就是抓包工具的极限,那年它双手插兜不知道什么是对手(doge)。
安装&使用
安装与启动whistle
npm install -g whistle
w2 start // 启动whistle
w2 stop //停止whistle
启动之后会在本机启动一台服务器,默认端口是8899
在本机打开该地址会进入whistle的控制面板,如下图所示。抓包,修改请求和响应的内容都是在这个控制面板内进行配置的。如果要防止其他人访问配置页面,可以在启动时加上登录用户名和密码 -n yourusername -w yourpassword
浏览器代理插件
在启动本地启动了whistle之后,要抓包网络的请求并不会经过whistle,这时候我们就需要安装一个插件,让目标网站的请求经过whistle完成抓包等后续的操作。
官方推荐的插件是SwitchyOmega,如果你使用的谷歌浏览器需要在应用商店翻墙进行下载。如果不想翻墙可以直接使用自带的edge浏览器,在edge的应用商店下载可以免翻墙。点击获取即可轻松下载。
安装完成之后浏览器的工具栏内就会出现一个圆圈图标。
我们进入选项界面对浏览器代理进行配置,把代理服务器填写whistle启动的端口和地址,然后把switchyOmega的选项改为proxy服务器代理就完成了。
这时候在浏览器内打开想要抓包的网站就可以抓包了。目前只可以抓http的请求,因为我们还没有进行证书配置,如何配置证书后面会说。
注意如果使用edge下载的插件就只能在edge插件内进行抓包,如果在谷歌打开网站,并不会有抓包的信息。
配置证书
虽然现在在whistle的network内打印出了一些信息,但全部都是http的请求,并没有https的请求,这是因为我们没有配置证书。配置证书方法如下,点击二维码进行证书下载(没错这个二维码是可以点击的,绷住了),随后跟着步骤走就行了。
安装证书请参考文档: wproxy.org/whistle/web…
配置成功的话https这块会变成一个对勾。
配置完证书之后再次刷新页面,就可以看到所有的https请求了,可以清晰的看到请求体和响应体的内容
手机抓包
首先抓包的前提是手机和电脑要处于一个网络下。关闭电脑端的防火墙,然后在手机的wifi设置中,把WiFi的代理模式设置为手动代理,主机名和端口号是 电脑的ip地址+whistle的端口号。ip地址可以通过终端的ipconfig查询。
配置完之后手机发送的请求在whistle的network列表中就能看到了。在手机端访问一下掘金的官网。
在工具栏这块可以通过settings选项对请求进行过滤。可以在whistle中看到手机端访问的列表数据。
应用场景
whistle的强大远远不止能够抓包这么简单,它还有很多其他的功能。
Weinre控制台
集成weinre的功能,用户只需通过简单配置(pattern weinre://id)即可使用,具体参见weinre,更多移动端调试方法可以参考:利用whistle调试移动端页面。
相信有过h5开发经历的同学都遇到过这种情况,我电脑f12模拟移动端调试的时候非常的完美,但是一到真机上会出现各种奇奇怪怪的问题,而这些问题往往是比较难以定位问题并修复的,因为在真机的h5页面上没有控制台,我们无法审查元素。
但是当你使用了whistle你会发现只需要配置一行规则,就可以轻松的调出控制台调试真机的h5页面,这就是Weinre控制台。具体效果如下图,这里为了方便展示,真机调试就用pc端模拟手机代替(真实调试的时候,需要先实现上述的手机抓包,即手机电脑在同一网络下,并且修改手机wifi的代理。)。可以看到左侧并不是浏览器自带的控制台,而是whistle自带的功能,在视察与修改左侧元素时,我们手机上的内容也会随之改变。
那么如何实现上面的效果呢?
我们只需要在Whistle控制台左侧的Rules中添加一条规则即可。
${监听的网址} weinre://${实例名称} 这个实例名称是工具栏中Weinre下拉框中的名字可以任意起
https://juejin.cn/ weinre://juejin
点击工具栏中Weinre下面的juejin即可跳转到Weinre控制台页面,再刷新下监听网址的页面即可审查元素。
借助Weinre控制台,我们可以更加容易的解决真机兼容性问题。
篡改响应
修改响应体还是很常用的,例如修复bug的时候,如果怀疑是接口返回值有误导致的问题,就可以通过修改响应体,来排查到底是不是后端的问题。
在调试接口的时候,例如后端接口新增了一个返回值,我们需要根据这个返回值进行相应的逻辑处理,这时候我们也可以通过修改响应体的方式mock一下新增的字段,只要确保自己mock的结果和接口返回的结构一样,就可以提前完成接口联调。
具体做法:
前半段是请求地址(支持正则匹配) 后半段是响应体的文件。file://${路径} 默认找的是Values下文件。
Ctrl+右键点击橘色的路径,会自动跳转到Values下对应的文件里,如果没有会自动创建非常方便。
mock.json
可以看到 加完配置之后对应接口的响应体就变成了mock.json里面的内容。
解决跨域
解决跨域是篡改响应的一种应用,有的后端接口没有配置CORS,导致前端接口跨域
历史解决:通过vite 或者 webpack 等工具做一个反向代理
通过Whistle的resHeaders 可直接修改跨域接口的响应头,增加cors 配置
/getList/ resHeaders://{cors}
# cors 文件
access-control-allow-credentials: true always
access-control-allow-headers: *
access-control-allow-methods: GET, PUT, POST, DELETE, HEAD, OPTIONS
access-control-allow-origin: *
access-control-expose-headers: *
access-control-max-age: 18000L
content-type: application/json
date: Fri, 02 Dec 2022 04:00:28 GMT
server: 123123
Access-Control-Allow-Origin: *
当然功能远不止这些,还可以 篡改 API响应时间、HTTP响应状态码等。。。
篡改请求
可以使用reqMerge修改修改请求体,它会把merge.json文件的请求体合并到原本接口的请求体中。
/savePerson/ reqMerge://{merge.json}
# merge.json
{
name:'张三'
}
jsPrepend 进行js注入
使用jsPrepend可以在目标网址的srcipt中添加任意的js代码。我们这里向页面中注入一个Vconsole移动端调试工具。${注入到哪个地址} jsPrepend://${注入的js路径}
https://juejin.cn/ jsPrepend://https://cdn.jsdelivr.net/npm/eruda@2.4.1/eruda.min.js
https://juejin.cn/ jsPrepend://{test.js}
test.js
var vConsole = new window.VConsole();
打开控制台可以发现,我们注入的js被添加到了head的最顶部。
VConsole成功显示到了页面上
域名映射
# 可以一个ip 配置多个域名 并且支持端口号
127.0.0.1:9000 ddd.com aaa.com
文档
whistle文档
结尾
头一次接触到抓包工具,感觉打开了新世界的大门。使用whistle,以后不管是开发mock接口数据,还是定位bug都方便了很多。
作者:欲买炸鸡同载可乐
链接:https://juejin.cn/post/7330151205770412095
- 上一篇:yarn 的安装和使用
- 下一篇:给你代码:关于npm的坑
相关推荐
- 电脑装系统用GHOST好,还是原装版本好?老司机都是这么装的
-
Hello大家好,我是兼容机之家的咖啡。安装Windows系统是原版ISO好还是ghost好呢?针对这个的问题,我们先来科普一下什么是ghost系统,和原版ISO镜像两者之间有哪些优缺点。如果是很了解...
- 苹果 iOS 14.5.1/iPadOS 14.5.1 正式版发布
-
IT之家5月4日消息今日凌晨,苹果发布了iOS14.5.1与iPadOS14.5.1正式版更新。这一更新距iOS14.5正式版发布过去了一周时间。IT之家了解到,苹果表示,...
- iOS 13.1.3 正式版发布 包含错误修复和改进
-
苹果今天发布了iOS13.1.3和iPadOS13.1.3,这是iOS13发布之后第四个升级补丁。iOS13.1.2两周前发布。iOS13.1.3主要包括针对iPad和...
- 还不理解 Error 和 Exception 吗,看这篇就够了
-
在Java中的基本理念是结构不佳的代码不能运行,发现错误的理想时期是在编译期间,因为你不用运行程序,只是凭借着对Java基本理念的理解就能发现问题。但是编译期并不能找出所有的问题,有一些N...
- Linux 开发人员发现了导致 MacBook“无法启动”的 macOS 错误
-
“多个严重”错误影响配备ProMotion显示屏的MacBookPro。...
- 启动系统时无法正常启动提示\windows\system32\winload.efi
-
启动系统时无法正常启动提示\windows\system32\winload.efi。该怎么解决? 最近有用户遇到了开机遇到的问题,是Windows未能启动。原因可能是最近更改了硬件或软件。虽然提...
- 离线部署之两种构建Ragflow镜像的方式,dify同理
-
在实际项目交付过程中,经常遇到要离线部署的问题,生产服务器无法连接外网,这时就需要先构建好ragflow镜像,然后再拷到U盘或刻盘,下面介绍两种构建ragflow镜像的方式。性能测试(网络情况好的情况...
- Go语言 error 类型详解(go语言 异常)
-
Go语言的error类型是用于处理程序运行中错误情况的核心机制。它通过显式的返回值(而非异常抛出)来管理错误,强调代码的可控性和清晰性。以下是详细说明及示例:一、error类型的基本概念内置接口...
- Mac上“闪烁的问号”错误提示如何修复?
-
现在Mac电脑的用户越来越多,Mac电脑在使用过程中也会出现系统故障。当苹果电脑无法找到系统软件时,Mac会给出一个“闪烁的问号”的标志。很多用户受到过闪烁问号这一常见的错误提示的影响,如何解决这个问...
- python散装笔记——177 sys 模块(python sys模块详解)
-
sys模块提供了访问程序运行时环境的函数和值,例如命令行参数...
- 30天自制操作系统:第一天(30天自制操作系统电子书)
-
因为咱们的目的是为了研究操作系统的组成,所以直接从系统启动的第二阶段的主引导记录开始。前提是将编译工具放在该文件目录的同级目录下,该工具为日本人川合秀实自制的编译程序,优化过的nasm编译工具。...
- 五大原因建议您现在不要升级iOS 13或iPadOS
-
今天苹果放出了iPadOS和iOS13的公测版本,任何对新版功能感兴趣的用户都可以下载安装参与测试。除非你想要率先体验Dark模式,以及使用AppleID来登陆Facebook等服务,那么外媒CN...
- Python安装包总报错?这篇解决指南让你告别pip烦恼!
-
在Python开发中,...
- 苹果提供了在M1 Mac上修复macOS重装错误的方案
-
#AppleM1芯片#在苹果新的M1Mac推出后不久,我们看到有报道称,在这些机器上恢复和重新安装macOS,可能会导致安装错误,使你的Mac无法使用。具体来说,错误信息如下:"An...
- 黑苹果卡代码篇三:常见卡代码问题,满满的干货
-
前言...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 电脑装系统用GHOST好,还是原装版本好?老司机都是这么装的
- 苹果 iOS 14.5.1/iPadOS 14.5.1 正式版发布
- iOS 13.1.3 正式版发布 包含错误修复和改进
- 还不理解 Error 和 Exception 吗,看这篇就够了
- Linux 开发人员发现了导致 MacBook“无法启动”的 macOS 错误
- 启动系统时无法正常启动提示\windows\system32\winload.efi
- 离线部署之两种构建Ragflow镜像的方式,dify同理
- Go语言 error 类型详解(go语言 异常)
- Mac上“闪烁的问号”错误提示如何修复?
- python散装笔记——177 sys 模块(python sys模块详解)
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- node卸载 (33)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- exceptionininitializererror (33)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)