iOS 17+ 与 macOS 14+ 上的 WKWebView 代理数据存储
在 iOS 17 或 macOS 14 及更高版本上,在创建并导航视图之前设置 proxyConfigurations,并在 CONNECT 中间层需要凭据时提供凭据。
import Network
import WebKit
@available(iOS 17.0, macOS 14.0, *)
@MainActor
func makeWebView(username: String, password: String) -> WKWebView {
let endpoint = NWEndpoint.hostPort(
host: "proxy.example.net", port: 8080)
let proxy = ProxyConfiguration(
httpCONNECTProxy: endpoint, tlsOptions: nil)
proxy.applyCredential(username: username, password: password)
let store = WKWebsiteDataStore.nonPersistent()
store.proxyConfigurations = [proxy]
let configuration = WKWebViewConfiguration()
configuration.websiteDataStore = store
return WKWebView(frame: .zero, configuration: configuration)
}返回的视图使用专用的非持久化 WKWebsiteDataStore。通过该视图加载目标网站。使用中间层的账户,或对不需要凭据的代理省略 applyCredential。对于这条未经身份验证的 HTTP 分支,HTTP 代理列表为该数据存储提供候选端点。
共享此存储的每个视图都共享其代理策略。这个专用存储还拥有临时网站数据,因此它不会继承另一个视图已有的网站登录状态。
让配置先于导航。WebKit 警告说,更改存储的代理配置可能会中断其当前网络连接。
单独的 URLSession 抓取以及随后的 loadHTMLString 只覆盖那一次 HTML 抓取。图片、脚本和后续导航仍使用视图的网络;该存储是配置这条路径的公开钩子。