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)
}

La vista devuelta usa un WKWebsiteDataStore dedicado y no persistente. Cargue el sitio web deseado a través de esa vista. Use la cuenta del intermediario u omita applyCredential para un proxy que no requiera ninguna. Para esa rama HTTP no autenticada, la lista de proxies HTTP proporciona puntos finales candidatos para el almacén de datos.

Cada vista que comparte este almacén comparte su política de proxy. Este almacén dedicado también tiene datos de sitios web efímeros, por lo que no hereda el inicio de sesión existente de otra vista.

Mantenga la configuración antes de la navegación. WebKit advierte que cambiar la configuración de proxy de un almacén puede interrumpir su red actual.

Una obtención separada con URLSession seguida de loadHTMLString solo cubre esa obtención HTML. Las imágenes, los scripts y la navegación posterior siguen usando la red de la vista; el almacén es el gancho público para configurar esa ruta.

Artículos relacionados