使用 Proxyman 拦截 iOS 18 WKWebView 的 HTTP/HTTPS 请求

使用 Proxyman 拦截 iOS 18 WKWebView 的 HTTP/HTTPS 请求 的封面图

1. 问题

使用 WKWebView 时,由于它不遵循系统代理设置,因此很难抓取网络流量(HTTP/HTTPS)。

WKWebView 也不像 Safari 那样提供 Network 控制台标签页。

因此,目前没有简单的方法可以抓取 WKWebView 的网络流量。

本文涵盖以下内容:

  • 如何使用 Proxyman 抓取 iOS 17 或 iOS 18 中 WKWebView 的 HTTPS 流量

2. 解决方案

从 iOS 17 和 iOS 18 开始,WKWebView 在 WKWebsiteDataStore 中引入了 proxyConfigurations。它允许我们为 WKWebView 设置代理。利用这一特性,我们就能轻松抓取 WKWebView 的网络流量。

你可以在这里查看文档:https://developer.apple.com/documentation/webkit/wkwebsitedatastore/4264546-proxyconfigurations

本教程演示如何使用 Proxyman 抓取 iOS 17/18 中 WKWebView 的网络流量。

2.1. 前提条件

  1. 从 Proxyman 官网下载 Proxyman

2.2. 设置

  1. 在 Xcode 中打开你的项目
  2. 找到你当前的 WKWebView 实例,并添加以下代码
lazy var webView: WKWebView = {
    let webConfiguration = WKWebViewConfiguration()

    // ✅ define Proxy Setting to Proxyman
    let httpProxy = ProxyConfiguration(
        httpCONNECTProxy: NWEndpoint.hostPort(
            host: NWEndpoint.Host(
                "127.0.0.1"
            ),
            port: NWEndpoint.Port(
                integerLiteral: 9090
            )
        )
    )

    // ✅ Tell WKWebView to use the Proxy
    let dataSource = WKWebsiteDataStore.default()
    dataSource.proxyConfigurations = [httpProxy]
    webConfiguration.websiteDataStore = dataSource
    
    // init view
    let webView = WKWebView(
        frame: .zero,
        configuration: webConfiguration
    )
    webView.translatesAutoresizingMaskIntoConstraints = false
    return webView
}()
  • 请将 127.0.0.1 和 9090 替换为你的 Proxyman IP 和端口,这里的值是 Proxyman 的默认值。
  • 如果在真机上测试,你需要 macOS 的 IP 地址,它可以在 Proxyman 窗口顶部的 Proxyman 工具栏中找到。
Proxyman 工具栏
Proxyman 工具栏

iOS 模拟器

  • 通过 Proxyman -> Certificate 菜单 -> Install to iOS -> Simulator -> Follow the instruction,将证书安装到你的 iOS 模拟器
将证书安装到 iOS 模拟器
将证书安装到 iOS 模拟器

真实的 iPhone/iPad 设备

将证书安装到 iPhone/iPad
将证书安装到 iPhone/iPad
  • 通过 Proxyman -> Certificate 菜单 -> Install to iOS -> Physical Device -> Follow the instruction,将证书安装到你的 iPhone/iPad

3. ✅ 重新加载你的 iOS 应用,并在 Proxyman 中查看流量

  • WKWebView 的所有流量都会被抓取并显示在 Proxyman 中。
  • 适用于任何第三方库发出的 HTTP/HTTPS 请求,例如 fetch、axios、XMLHttpRequest 等。
抓取 WKWebView 的 HTTPS 流量
抓取 WKWebView 的 HTTPS 流量

4. 后续

  • 你可以使用 Proxyman 过滤器(Filter)筛选出需要调试的流量。
  • 你还可以使用 Proxyman 的 Replay 功能,重放需要调试的流量。

重要的设置提示

请将此代理配置保留在调试版本中,不要包含在 App Store 版本中。只有在同一台 Mac 上运行的模拟器才使用 127.0.0.1;真机需要使用 Proxyman 显示的 Mac IP。请在创建 WKWebView 之前应用代理。已有连接可能仍走旧的路由,因此在会话中更改代理后,请重新创建 web view 或其数据存储(data store)。

Noah Tran
Noah Tran

最后修订于 2026年7月18日。 将指南扩展到 iOS 18 以外的版本,并新增安全调试构建和连接方面的建议。

查看 WKWebView 内部的网络调用

将调试用的 WKWebView 代理指向 Proxyman,检查页面加载、API 调用、请求头和响应体。

获取适用于 Mac 的 Proxyman