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 ফেচ কভার করে। ছবি, স্ক্রিপ্ট ও পরবর্তী নেভিগেশন এখনও ভিউয়ের নেটওয়ার্কিং ব্যবহার করে; স্টোরটিই সেই পথ কনফিগার করার সর্বজনীন হুক।

সম্পর্কিত নিবন্ধ