使用网络库以编程方式在 iOS 中配置代理设置

问题描述 投票:0回答:2

如何为使用

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

但我不知道如何配置它以使用代理。

ios swift networking proxy
2个回答
3
投票

网络框架中没有内置代理支持。它提供对原始 TCP 流和 UDP 数据包的访问。

如果您使用网络框架来处理 HTTP 协议,那么您将需要编写自己的代理支持(为什么要这样做?;只需使用

URLSession
)。

如果您想使用

CONNECT
通过网络代理传输任意 TCP 流,那么您需要自己实现。

如果您使用其他 TCP 或 UDP 协议,那么您可以使用 SOCKS 代理,但您将再次需要实现这一点。


0
投票

我们现在在网络框架中支持代理,它是

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)

参见参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.