Прокси-хранилища данных WKWebView в iOS 17+ и macOS 14+
В 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. Изображения, скрипты и последующая навигация по-прежнему используют сеть представления; хранилище — это публичный хук для настройки этого маршрута.