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 returnerte visningen bruker et dedikert ikke-vedvarende WKWebsiteDataStore. Last inn nettstedet du vil bruke, gjennom den visningen. Bruk mellomleddets konto, eller utelat applyCredential for en proxy som ikke krever noen. For den uautentiserte HTTP-grenen gir HTTP-proxylisten kandidat-endepunkter for datalageret.

Hver visning som deler dette lageret, deler proxypolicyen. Dette dedikerte lageret har også midlertidige nettstedsdata, så det arver ikke en annen visnings eksisterende nettstedsinnlogging.

Hold konfigurasjonen før navigeringen. WebKit advarer om at endring av et lagers proxykonfigurasjon kan avbryte den gjeldende nettverksaktiviteten.

En separat URLSession-henting etterfulgt av loadHTMLString dekker bare den HTML-hentingen. Bilder, skript og senere navigering bruker fortsatt visningens nettverk; lageret er den offentlige kroken for å konfigurere den ruten.

Relaterte artikler