在 iOS 调试中有一类请求比较特殊页面是 H5运行在 App 内使用 WKWebView 加载这种请求表面上看和普通 App 请求一样但抓包时会出现一些情况比如有时可以直接看到有时只能看到一部分有时代理抓不到关键是WebKit 请求走的是哪一方面一、先确认请求是不是 WebKit 发出的打开 App 中的某个页面例如活动页登录页H5内嵌 Web 页面然后做一个判断页面是否可以在 Safari 中打开同样 URL验证方法在页面中复制 URL粘贴到 Safari 打开对比页面行为如果内容一致可以认为请求来源是 WebKitWKWebView二、直接用 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 请求准备工具CharlesProxymanSniffmaster配置代理步骤如下启动代理工具获取端口例如 8888iPhone 与电脑同一 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 查看数据结构。参考链接https://www.sniffmaster.net/blog/140