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

Palautettu näkymä käyttää omaa ei-pysyvää WKWebsiteDataStore. Lataa haluttu verkkosivusto kyseisen näkymän kautta. Käytä välittäjän tiliä tai jätä applyCredential pois proxylle, joka ei vaadi mitään. Tälle todentamattomalle HTTP-haaralle HTTP-proxyluettelo tarjoaa ehdokaspäätepisteitä datavarastolle.

Jokainen tämän varaston jakava näkymä jakaa sen proxykäytännön. Tällä omalla varastolla on myös hetkellisiä verkkosivustotietoja, joten se ei peri toisen näkymän olemassa olevaa verkkosivustokirjautumista.

Pidä kokoonpano ennen navigointia. WebKit varoittaa, että varaston proxykokoonpanon muuttaminen voi keskeyttää sen nykyisen verkkotoiminnan.

Erillinen URLSession-haku ja sen jälkeen loadHTMLString kattaa vain kyseisen HTML-haun. Kuvat, skriptit ja myöhempi navigointi käyttävät edelleen näkymän verkkoa; varasto on julkinen koukku kyseisen reitin määrittämiseen.

Aiheeseen liittyvät artikkelit