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

लौटाया गया व्यू एक समर्पित गैर-स्थायी WKWebsiteDataStore का उपयोग करता है। इच्छित वेबसाइट को उसी व्यू से लोड करें। मध्यस्थ का खाता उपयोग करें या ऐसे प्रॉक्सी के लिए applyCredential छोड़ दें जिसे किसी क्रेडेंशियल की आवश्यकता नहीं है। उस अनप्रमाणित HTTP शाखा के लिए, HTTP प्रॉक्सी सूची डेटा स्टोर के लिए संभावित एंडपॉइंट प्रदान करती है।

इस स्टोर को साझा करने वाला हर व्यू इसकी प्रॉक्सी नीति साझा करता है। इस समर्पित स्टोर में अल्पकालिक वेबसाइट डेटा भी होता है, इसलिए यह किसी अन्य व्यू के मौजूदा वेबसाइट लॉगिन को विरासत में नहीं लेता।

कॉन्फ़िगरेशन को नेविगेशन से पहले रखें। WebKit चेतावनी देता है कि स्टोर का प्रॉक्सी कॉन्फ़िगरेशन बदलने से उसकी मौजूदा नेटवर्किंग बाधित हो सकती है।

एक अलग URLSession फ़ेच और उसके बाद loadHTMLString केवल उसी HTML फ़ेच को कवर करता है। चित्र, स्क्रिप्ट और बाद का नेविगेशन अभी भी व्यू की नेटवर्किंग का उपयोग करते हैं; स्टोर उस मार्ग को कॉन्फ़िगर करने का सार्वजनिक हुक है।

संबंधित लेख