Network
(而不是使用 URLSession
)建立的连接设置代理设置?
如此答案中所述,可以通过更新配置来使用
URLSession
来实现此目的:
configuration.connectionProxyDictionary = [
kCFNetworkProxiesHTTPEnable as String: 1,
kCFNetworkProxiesHTTPProxy as String: ip,
kCFNetworkProxiesHTTPPort as String: port,
"HTTPSEnable": 1,
"HTTPSProxy": ip,
"HTTPSPort": port,
]
我想使用
Network
库做类似的事情。
我目前正在创建连接:
NWConnection(host: host, port: port, using: .init())
但我不知道如何配置它以使用代理。
网络框架中没有内置代理支持。它提供对原始 TCP 流和 UDP 数据包的访问。
如果您使用网络框架来处理 HTTP 协议,那么您将需要编写自己的代理支持(为什么要这样做?;只需使用
URLSession
)。
如果您想使用
CONNECT
通过网络代理传输任意 TCP 流,那么您需要自己实现。
如果您使用其他 TCP 或 UDP 协议,那么您可以使用 SOCKS 代理,但您将再次需要实现这一点。
我们现在在网络框架中支持代理,它是
ProxyConfiguration
。它支持中继跳、HTTPConnect 代理和 SOCKSV5 代理,我们可以用它来配置 NWConnection、URLSession 和 WKWebView 连接。
这是为 NWConnection 配置 SOCKSV5Proxy 的示例。
let parameters = webSocketURL.scheme == "wss" ? NWParameters.tls : NWParameters.tcp
let options = NWProtocolWebSocket.Options()
options.autoReplyPing = true
parameters.defaultProtocolStack.applicationProtocols.insert(options, at: 0)
if #available(iOS 17.0, *) {
let socksv5Proxy = NWEndpoint.hostPort(host: "192.168.1.4", port: 8889)
let config = ProxyConfiguration.init(socksv5Proxy: socksv5Proxy)
let context = NWParameters.PrivacyContext(description: "my socksv5Proxy")
context.proxyConfigurations = [config]
parameters.setPrivacyContext(context)
}
let connection = NWConnection(to: .url(webSocketURL), using: parameters)
connection.start(queue: .main)
参见参考资料: