在 iOS 调试中,有一类请求比较特殊,页面是 H5,运行在 App 内,使用 WKWebView 加载,这种请求表面上看和普通 App 请求一样,但抓包时会出现一些情况,比如:
- 有时可以直接看到
- 有时只能看到一部分
- 有时代理抓不到
关键是WebKit 请求走的是哪一方面
一、先确认请求是不是 WebKit 发出的
打开 App 中的某个页面,例如:
- 活动页
- 登录页(H5)
- 内嵌 Web 页面
然后做一个判断,页面是否可以在 Safari 中打开同样 URL
验证方法
- 在页面中复制 URL
- 粘贴到 Safari 打开
- 对比页面行为
如果内容一致,可以认为请求来源是 WebKit(WKWebView)
二、直接用 Safari Web Inspector 抓
对于 WebKit 请求,第一步不一定是代理抓包。
可以先用 Safari 自带工具。
开启 Web Inspector
在 iPhone 上:
- 设置 → Safari
- 打开“高级”
- 开启 Web 检查器(Web Inspector)
在 Mac 上:
- 打开 Safari
- 菜单栏 → 开发
- 连接设备
抓取请求
- 打开 App 中的 H5 页面
- 在 Mac Safari 的“开发”菜单中选择对应页面
- 打开 Network 面板
观察结果
可以直接看到:
- XHR 请求
- Fetch 请求
- JS 执行情况
这些数据来自 WebKit 内部。
三、当 Web Inspector 不够用
Web Inspector 有两个限制:
- 无法抓到所有底层请求
- 不支持修改请求
如果需要:
- 查看完整 Header
- 分析 HTTPS
- 修改请求
需要使用代理抓包。
四、用代理抓 WebKit 请求
准备工具:
- Charles
- Proxyman
- Sniffmaster
配置代理
步骤如下:
- 启动代理工具
- 获取端口(例如 8888)
- iPhone 与电脑同一 Wi-Fi
- 设置 HTTP 代理
–
安装证书
在 iPhone 上:
- 下载证书
- 安装描述文件
- 在“证书信任设置”中开启信任
触发请求
重新打开 WebView 页面。观察变化
在代理工具中可以看到:
- 页面加载请求
- JS 发起的接口请求
如果页面来自 WebKit,这些请求会正常经过代理。
五、一个容易混淆的情况
在某些页面中:
- 主页面请求可以抓到
- 部分接口请求抓不到
这时可以观察 URL:
- 如果接口域名不同
- 或使用了特殊协议
可能绕过了代理。
六、可以用数据线直连设备进行抓包
当代理抓不到部分请求时,可以使用 SniffMaster(抓包大师)。
操作步骤
- USB 连接 iPhone
- 保持设备解锁
- 点击信任电脑
- 启动 SniffMaster
- 选择设备
- 安装描述文件
- 进入 数据流抓包 / HTTPS 暴力抓包模式
- 点击开始
观察结果
在这里可以看到:
- WebView 发起的所有网络连接
- 包括未经过代理的请求
七、只抓当前 WebView 的流量
设备级抓包会包含:
- 系统请求
- 其他 App 请求
可以通过筛选减少干扰。
筛选方式
- 点击 选择 App
- 勾选当前 App
- 再触发页面加载

再进一步筛选
可以根据域名过滤:
api.example.com
快速定位接口请求。

修改 WebKit 请求的方式
如果需要修改请求,例如:
- 修改接口参数
- 模拟返回数据
需要回到代理抓包。
使用代理拦截
在 Charles 或 Proxyman 或 Sniffmaster:
- 开启 Breakpoints 或 打开拦截器
- 刷新页面
- 拦截请求
- 修改参数
- 继续发送
HTTPS 数据如果不可见
如果在代理中:
- 请求存在
- 但 Response 看不到
可以做两个测试:
验证步骤
- 用 Safari 打开同一 URL
- 查看是否能解密
判断结果
- Safari 也解不开 → 证书问题
- Safari 正常 → 页面内存在校验
此时可以用 SniffMaster 查看数据结构。