Flutter应用网络请求调试不停是业内难题,原因在于Dart语言标准库的网络请求不会走Wi-Fi署理,常规通过设置Wi-Fi署理来抓包的方式行不通。这给我们一样平常开辟测试造成了很大的阻碍,严峻降低工作服从。因此写一篇教程,讲解怎样使用Reqable对Flutter移动应用举行抓包调试。
1. 情况预备
电脑:Windows/Mac/Linux机器,安装Reqable客户端(发起2.18.0以上版本)。
手机:Android/iOS设备,安装Reqable移动端App(要求最低2.19.0版本)。
2. 安装证书
首先,启动Reqable电脑客户端,完成初始化进入主界面。点击顶部手机图标,打开二维码。
接下来,手机连接到和电脑所在的同一个Wi-Fi局域网。打开Reqable手机App,选择协同模式,扫码上面电脑端二维码举行连接。
连接成功后,开始下一步,安装证书。由于是对手机抓包,必要在手机安装证书,而不是在电脑安装证书,以是电脑上的证书可以选择不安装。
Reqable在上面选择协同模式初始化的时间,已经主动将电脑的根证书同步到了手机,安装证书只必要在手机上操纵即可,无需将证书手动从电脑拷贝传输到手机。注意:手机抓包,必须安装电脑证书到手机。如果App是以独立模式初始化,App会生成和电脑差别的根证书,扫码连接电脑后必要手动同步根证书到手机再安装。
Android设备
注意,Flutter应用程序只信托Android系统目录的证书,不会信托用户证书。Native应用我们可以通过设置 network_security_config.xml 文件大概降低targetSdkVersion到33来让应用信托用户证书,但是这个对于Flutter应用是不可的。
因为Dart SDK中已经强行写死了只信托系统目录下的证书。这个逻辑定义在 runtime/bin/security_context_linux.cc 中,有兴趣可以去翻看源码。
- // On Android, we don't compile in the trusted root certiicates. Instead,// we use the directory of trusted certificates already present on the// device. This saves ~240KB from the size of the binary. This has the// drawback that SSL_do_handshake will synchronously hit the filesystem// looking for root certs during its trust evaluation. We call// SSL_do_handshake directly from the Dart thread so that Dart code can be// invoked from the "bad certificate" callback called by SSL_do_handshake.const char* android_cacerts = "/system/etc/security/cacerts";LoadRootCertCache(android_cacerts);
复制代码 Android设备上要安装证书到系统目录,现在只有两种方式:
方式一:Root设备,解锁System分区,将证书复制到 /system/etc/security/cacerts 目录。可以按照Reqable中的提示举行操纵。
- adb rootadb shell avbctl disable-verificationadb remountadb push reqable-ca.crt /system/etc/security/cacerts/证书hash.0
复制代码 方式二:设备刷Magisk情况,从Reqable手机App中下载证书模块,安装即可。
根证书安装成功后,Reqable手机App会有证书已安装的提示。如果已经安装,但仍然提示证书未安装,可能是操纵出错,请复查安装步骤。不要怀疑检测有问题!
iOS设备
iOS安装证书要简单很多,标准三个步骤。
a. 下载描述文件。可以从Reqable手机App直接保存,也可以启动浏览器下载描述文件。
b. 设置 -> 下载的描述文件 -> 选择文件 -> 安装。
c. 设置 -> 通用 -> 关于 -> 证书信托设置 -> 打开开关。
可以看到iOS设备安装证书要简单很多,以是我们一样平常推荐使用iOS设备调试。
更多有关证书安装的分析,可以查阅Reqable官网文档。
3. 加强模式
在手机App上,Reqable提供了两种网络流量捕获模式,一种是常规模式,一种是加强模式。这里先简单介绍下两种模式的区别。
常规模式,和设置Wi-Fi署理效果一样,但是不必要用户去手动设置Wi-Fi署理。可以对绝大多数应用的流量分析,包罗浏览器等。
加强模式,强制捕获所有的流量,包罗不走Wi-Fi署理的网络请求流量,比方我们必要办理的Flutter应用。在Android设备上,加强模式还可以获取到流量泉源的应用信息。
默认情况下,Android是主动开启加强模式的,用户无需手动开启。iOS设备有些特别,手机在飞协同模式下无法开启加强模式,必须连接协同设备(电脑),并在标题菜单中手动开启。
对于Flutter应用,请肯定要开启加强模式。加强模式开启后,标题后面会出现一个钥匙 |