答案
使用 whistle 调试移动端应用需要配置移动设备的网络代理,使其通过 whistle 代理服务器访问网络。
基本配置步骤
1. 确保设备和电脑在同一网络
- 手机和电脑连接到同一个 Wi-Fi 网络
- 或者使用 USB 共享网络
2. 获取电脑 IP 地址
Windows:
bashipconfig
Mac/Linux:
bashifconfig
记录电脑的 IP 地址,例如:192.168.1.100
3. 启动 whistle
bashw2 start
确认 whistle 正在运行,默认端口为 8899
4. 配置手机代理
iOS 设备:
- 打开"设置" → "无线局域网"
- 点击当前连接的 Wi-Fi 右侧的 "i" 图标
- 滚动到底部,找到"HTTP 代理"
- 选择"手动"
- 服务器:输入电脑 IP 地址
- 端口:输入
8899
Android 设备:
- 打开"设置" → "Wi-Fi"
- 长按当前连接的 Wi-Fi
- 选择"修改网络"或"网络详情"
- 显示高级选项
- 代理:选择"手动"
- 代理主机名:输入电脑 IP 地址
- 代理端口:输入
8899
HTTPS 证书配置
1. 在手机浏览器访问 whistle
在手机浏览器中访问:http://电脑IP:8899/
例如:http://192.168.1.100:8899/
2. 下载并安装证书
- 点击 "HTTPS" 标签
- 点击 "下载 RootCA" 下载证书
- 下载完成后安装证书
iOS 证书安装:
- 下载后打开"设置" → "已下载描述文件"
- 点击安装证书
- 安装后进入"设置" → "通用" → "关于本机" → "证书信任设置"
- 找到 whistle 证书,开启"针对根证书启用完全信任"
Android 证书安装:
- 下载后打开证书文件
- 按照提示安装证书
- 安装后进入"设置" → "安全" → "加密与凭据" → "受信任的凭据"
- 确认证书已安装
验证配置
1. 测试 HTTP 请求
在手机浏览器访问任意网站,检查 whistle 管理界面是否显示请求记录。
2. 测试 HTTPS 请求
访问 HTTPS 网站,确认能够正常加载且 whistle 能够拦截请求。
常见问题解决
1. 无法连接到代理
检查项:
- 确认电脑和手机在同一网络
- 检查电脑防火墙是否阻止了 8899 端口
- 确认 whistle 正在运行
- 尝试 ping 电脑 IP 地址
2. HTTPS 请求失败
解决方法:
- 确认证书已正确安装并信任
- 重启手机浏览器
- 清除浏览器缓存
- 检查 whistle 的 HTTPS 拦截是否启用
3. 某些应用无法拦截
原因:
- 应用使用了证书绑定(Certificate Pinning)
- 应用使用了自定义的网络库
- 应用检测到了代理环境
解决方法:
- 使用支持证书绑定的调试工具
- 对应用进行逆向分析
- 使用虚拟机或模拟器进行调试
高级技巧
1. 使用 USB 调试
对于 Android 设备,可以使用 ADB 转发端口:
bashadb reverse tcp:8899 tcp:8899
2. 配置规则
在 whistle 中添加针对移动端的规则:
shell# 移动端专用规则 m.example.com resBody://{mobile-mock.json} app.example.com reqHeaders://{mobile-headers.json}
3. 抓取 App 网络请求
- 确保 App 使用系统网络库
- 关闭 App 的网络检测功能
- 使用 Wi-Fi 而非移动数据
安全注意事项
-
不要在公共网络使用
- 避免在咖啡厅等公共场所配置代理
- 防止敏感信息被窃取
-
调试完成后关闭代理
- 及时关闭手机代理设置
- 停止 whistle 服务
-
保护证书安全
- 不要将证书分享给他人
- 定期更换证书