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

Похожие статьи