บน iOS 17 และใหม่กว่า Network.framework สามารถใช้พร็อกซี SOCKSv5 ผ่านบริบทความเป็นส่วนตัวได้ แนบบริบทนั้นกับพารามิเตอร์ก่อนสร้างการเชื่อมต่อ:

import Network

@available(iOS 17.0, *)
func makeConnection() -> NWConnection {
    let parameters = NWParameters.tls
    let context = NWParameters.PrivacyContext(description: "Service route")
    let endpoint = NWEndpoint.hostPort(
        host: "proxy.example", port: 1080)
    context.proxyConfigurations = [
        ProxyConfiguration(socksv5Proxy: endpoint)
    ]
    parameters.setPrivacyContext(context)
    return NWConnection(
        host: "service.example", port: 443, using: parameters)
}

ฟังก์ชันส่งคืนการเชื่อมต่อ TLS ที่ยังไม่เริ่ม ติดตั้งการจัดการสถานะของแอป เริ่มบนคิวที่ต้องการ แล้วแลกเปลี่ยนโปรโตคอลของแอปผ่านเส้นทางการส่งและรับตามปกติ

proxy.example:1080 คือตัวรับฟัง SOCKS สำหรับการเชื่อมต่อบริการสาธารณะที่ได้รับอนุญาต รายการพร็อกซี SOCKS5 จะจัดหาโฮสต์และพอร์ตที่เหมาะสม service.example:443 ยังคงเป็นปลายทาง บริบทความเป็นส่วนตัวใช้การกำหนดค่าพร็อกซีกับการเชื่อมต่อที่เชื่อมโยงกับบริบทนั้น การสร้างการเชื่อมต่อที่ไม่เกี่ยวข้องด้วยพารามิเตอร์อื่นจะไม่สืบทอดการตั้งค่านี้

นี่คืออินเทอร์เฟซการเชื่อมต่อของ Network.framework การแทนที่พร็อกซีของ URLSession หรือการตั้งค่าที่เก็บข้อมูลของ WKWebView จะกำหนดค่าผู้บริโภคแยกเหล่านั้น สำหรับ WebSocket ที่สร้างบน NWConnection แอปต้องจัดหาตัวเลือกโปรโตคอล WebSocket ที่เหมาะสมด้วย

บทความที่เกี่ยวข้อง