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 را پوشش می‌دهد. تصاویر، اسکریپت‌ها و پیمایش بعدی همچنان از شبکه‌رسانی نما استفاده می‌کنند؛ مخزن قلاب عمومی برای پیکربندی این مسیر است.

مقالات مرتبط