WebKit 抓包,WKWebView 请求的完整数据获取方法

本文围绕 WebKit 抓包,通过实际调试过程介绍了如何使用 Safari Web Inspector、Charles、Proxyman 与 SniffMaster 抓取 WKWebView 中的网络请求,并说明了在代理抓包与设备本机抓包之间切换的具体操作方法,帮助开发者在 WebView 场景中完整获取与分析网络数据。

在 iOS 调试中,有一类请求比较特殊,页面是 H5,运行在 App 内,使用 WKWebView 加载,这种请求表面上看和普通 App 请求一样,但抓包时会出现一些情况,比如:

  1. 有时可以直接看到
  2. 有时只能看到一部分
  3. 有时代理抓不到

关键是WebKit 请求走的是哪一方面


一、先确认请求是不是 WebKit 发出的

打开 App 中的某个页面,例如:

  • 活动页
  • 登录页(H5)
  • 内嵌 Web 页面

然后做一个判断,页面是否可以在 Safari 中打开同样 URL


验证方法

  1. 在页面中复制 URL
  2. 粘贴到 Safari 打开
  3. 对比页面行为

如果内容一致,可以认为请求来源是 WebKit(WKWebView)


二、直接用 Safari Web Inspector 抓

对于 WebKit 请求,第一步不一定是代理抓包。

可以先用 Safari 自带工具。


开启 Web Inspector

在 iPhone 上:

  1. 设置 → Safari
  2. 打开“高级”
  3. 开启 Web 检查器(Web Inspector)

在 Mac 上:

  1. 打开 Safari
  2. 菜单栏 → 开发
  3. 连接设备

抓取请求

  1. 打开 App 中的 H5 页面
  2. 在 Mac Safari 的“开发”菜单中选择对应页面
  3. 打开 Network 面板

观察结果

可以直接看到:

  • XHR 请求
  • Fetch 请求
  • JS 执行情况

这些数据来自 WebKit 内部。


三、当 Web Inspector 不够用

Web Inspector 有两个限制:

  • 无法抓到所有底层请求
  • 不支持修改请求

如果需要:

  • 查看完整 Header
  • 分析 HTTPS
  • 修改请求

需要使用代理抓包。


四、用代理抓 WebKit 请求

准备工具:

  • Charles
  • Proxyman
  • Sniffmaster

配置代理

步骤如下:

  1. 启动代理工具
  2. 获取端口(例如 8888)
  3. iPhone 与电脑同一 Wi-Fi
  4. 设置 HTTP 代理

端口


安装证书

在 iPhone 上:

  1. 下载证书
  2. 安装描述文件
  3. 在“证书信任设置”中开启信任

触发请求

重新打开 WebView 页面。观察变化

在代理工具中可以看到:

  • 页面加载请求
  • JS 发起的接口请求

如果页面来自 WebKit,这些请求会正常经过代理。


五、一个容易混淆的情况

在某些页面中:

  • 主页面请求可以抓到
  • 部分接口请求抓不到

这时可以观察 URL:

  • 如果接口域名不同
  • 或使用了特殊协议

可能绕过了代理。


六、可以用数据线直连设备进行抓包

当代理抓不到部分请求时,可以使用 SniffMaster(抓包大师)


操作步骤

  1. USB 连接 iPhone
  2. 保持设备解锁
  3. 点击信任电脑
  4. 启动 SniffMaster
  5. 选择设备
  6. 安装描述文件
  7. 进入 数据流抓包 / HTTPS 暴力抓包模式
  8. 点击开始

观察结果

在这里可以看到:

  • WebView 发起的所有网络连接
  • 包括未经过代理的请求

七、只抓当前 WebView 的流量

设备级抓包会包含:

  • 系统请求
  • 其他 App 请求

可以通过筛选减少干扰。


筛选方式

  1. 点击 选择 App
  2. 勾选当前 App
  3. 再触发页面加载

app


再进一步筛选

可以根据域名过滤:

api.example.com

快速定位接口请求。
过滤


修改 WebKit 请求的方式

如果需要修改请求,例如:

  • 修改接口参数
  • 模拟返回数据

需要回到代理抓包。


使用代理拦截

在 Charles 或 Proxyman 或 Sniffmaster:

  1. 开启 Breakpoints 或 打开拦截器
  2. 刷新页面
  3. 拦截请求
  4. 修改参数
  5. 继续发送

HTTPS 数据如果不可见

如果在代理中:

  • 请求存在
  • 但 Response 看不到

可以做两个测试:

验证步骤

  1. 用 Safari 打开同一 URL
  2. 查看是否能解密

判断结果

  • Safari 也解不开 → 证书问题
  • Safari 正常 → 页面内存在校验

此时可以用 SniffMaster 查看数据结构。