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

在 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. 再触发页面加载

再进一步筛选

可以根据域名过滤:

复制代码
api.example.com

快速定位接口请求。


修改 WebKit 请求的方式

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

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

需要回到代理抓包。


使用代理拦截

在 Charles 或 Proxyman 或 Sniffmaster:

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

HTTPS 数据如果不可见

如果在代理中:

  • 请求存在
  • 但 Response 看不到

可以做两个测试:

验证步骤

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

判断结果

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

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

参考链接:https://www.sniffmaster.net/blog/140

相关推荐
zhangren024682 小时前
Laravel5.x版本特性全解析
android·vue.js·spring boot·mysql
mcooiedo2 小时前
Go-Gin Web 框架完整教程
前端·golang·gin
小陈工2 小时前
Python Web开发入门(一):虚拟环境与依赖管理,从零搭建纯净开发环境
开发语言·前端·数据库·git·python·docker·开源
wuhen_n2 小时前
排列算法完全指南 - 从全排列到N皇后,一套模板搞定所有排列问题
前端·javascript·算法
Cobyte2 小时前
微信 ClawBot 接入本地 AI Agent 的实现原理
前端·agent·ai编程
@大迁世界2 小时前
15.React 中的 Fragment 是什么?它出现的动机是什么?
前端·javascript·react.js·前端框架·ecmascript
EasyControl移动设备管理2 小时前
打破系统壁垒:从 Android 到 macOS,打造全平台统一终端管理(MDM)方案
android·人工智能·物联网·macos·移动设备管理·mdm系统·跨区域设备
帅得不敢出门2 小时前
Android Framework中调用由java编译成的jar接口
android·java·framework·jar
吃一根烤肠2 小时前
使用ChatGPT Copilot加速Python调试:实战指南
前端·ui·html