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 returnerede visning bruger et dedikeret ikke-permanent WKWebsiteDataStore. Indlæs det ønskede websted via denne visning. Brug mellemleddets konto, eller udelad applyCredential for en proxy, der ikke kræver nogen. For den uautentificerede HTTP-gren giver HTTP-proxylisten kandidat-slutpunkter til datalageret.

Enhver visning, der deler dette lager, deler dets proxypolitik. Dette dedikerede lager har også midlertidige webstedsdata, så det arver ikke en anden visnings eksisterende webstedslogin.

Hold konfigurationen foran navigationen. WebKit advarer om, at ændring af et lagers proxykonfiguration kan afbryde dets aktuelle netværk.

Et separat URLSession-hent efterfulgt af loadHTMLString dækker kun det HTML-hent. Billeder, scripts og senere navigation bruger stadig visningens netværk; lageret er den offentlige krog til at konfigurere den rute.

Relaterede artikler