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

Chế độ xem được trả về dùng một WKWebsiteDataStore chuyên dụng không lâu bền. Tải trang web mong muốn qua chế độ xem đó. Dùng tài khoản của trung gian hoặc bỏ qua applyCredential cho proxy không cần thông tin nào. Với nhánh HTTP chưa xác thực đó, danh sách proxy HTTP cung cấp các điểm cuối ứng viên cho kho dữ liệu.

Mọi chế độ xem chia sẻ kho này đều chia sẻ chính sách proxy của nó. Kho chuyên dụng này cũng có dữ liệu trang web tạm thời, nên nó không kế thừa thông tin đăng nhập trang web hiện có của chế độ xem khác.

Giữ cấu hình trước khi điều hướng. WebKit cảnh báo rằng việc thay đổi cấu hình proxy của một kho có thể làm gián đoạn mạng hiện tại của nó.

Một lượt tải URLSession riêng biệt, sau đó là loadHTMLString, chỉ bao phủ lượt tải HTML đó. Hình ảnh, tập lệnh và điều hướng sau đó vẫn dùng mạng của chế độ xem; kho chính là móc công khai để cấu hình tuyến đó.

Bài viết liên quan