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

Vizualizarea returnată folosește un WKWebsiteDataStore dedicat, nepersistent. Încărcați site-ul dorit prin acea vizualizare. Folosiți contul intermediarului sau omiteți applyCredential pentru un proxy care nu necesită niciunul. Pentru acea ramură HTTP neautentificată, lista de proxy HTTP oferă puncte finale candidate pentru magazinul de date.

Fiecare vizualizare care partajează acest magazin îi partajează politica de proxy. Acest magazin dedicat are și date efemere de site, așa că nu moștenește autentificarea existentă a altei vizualizări.

Păstrați configurația înainte de navigare. WebKit avertizează că schimbarea configurației de proxy a unui magazin poate întrerupe rețeaua curentă a acestuia.

O preluare URLSession separată urmată de loadHTMLString acoperă doar acea preluare HTML. Imaginile, scripturile și navigarea ulterioară folosesc în continuare rețeaua vizualizării; magazinul este cârligul public pentru configurarea acelei rute.

Articole similare