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

Den returnerade vyn använder ett dedikerat icke-beständigt WKWebsiteDataStore. Läs in den avsedda webbplatsen via den vyn. Använd mellanhandens konto eller utelämna applyCredential för en proxy som inte kräver något. För den oautentiserade HTTP-grenen tillhandahåller HTTP-proxylistan kandidatslutpunkter för datalagret.

Varje vy som delar detta lager delar dess proxypolicy. Detta dedikerade lager har också tillfälliga webbplatsdata, så det ärver inte en annan vys befintliga webbplatsinloggning.

Håll konfigurationen före navigeringen. WebKit varnar för att ändring av ett lagers proxykonfiguration kan avbryta dess pågående nätverkstrafik.

En separat URLSession-hämtning följd av loadHTMLString täcker bara den HTML-hämtningen. Bilder, skript och senare navigering använder fortfarande vyns nätverk; lagret är den offentliga kroken för att konfigurera den vägen.

Relaterade artiklar