在 iOS 中以编程方式配置代理设置

sas*_*mar 13 objective-c ios nsurlsession ios9

如何在 iOS 中以编程方式配置代理设置NSURLSession?我跟着这个链接

但似乎kCFStreamPropertyHTTPProxyHostkCFStreamPropertyHTTPProxyPort都被弃用了iOS 9。那么以编程方式创建代理的方法是什么?

gch*_*ita 2

Apple 开发者论坛中有 2 个主题涉及此问题。

\n

旧的一个,表明我们应该使用kCFNetworkProxiesHTTPEnable,kCFNetworkProxiesHTTPProxykCFNetworkProxiesHTTPPort键来代替已弃用的kCFStreamPropertyHTTPProxyHostkCFStreamPropertyHTTPProxyPort。但这仅修复了有关 HTTP 代理设置的警告。

\n

关于HTTPS代理密钥,有以下说法:

\n
\n

请提交包含详细信息的错误,并暂时继续使用已弃用的\n密钥。

\n
\n

在线程的底部,这个:

\n
\n

AFAIK 你不需要匹配的 \xe2\x80\x98HTTPS\xe2\x80\x99 常量\xe2\x80\x94这是 OS X\only \xe2\x80\x94 因为 iOS 从另一个推断一个。

\n
\n

但显然这不起作用。

\n

最近的线程中,有一个响应,而不是这些键,使用常量字符串"HTTPSEnable""HTTPSProxy"并且"HTTPSPort"用于 HTTPS 情况。

\n

因此,该错误要么是 HTTPS 代理密钥不可用于 iOS 平台,要么是新密钥无法按 HTTPS 代理的预期工作。

\n

据我所知,如果您使用 HTTP 代理,则可以肯定避免警告,如下所示:

\n
NSURLSessionConfiguration *configuration = NSURLSessionConfiguration.defaultSessionConfiguration;\nNSDictionary * connectionProxyDictionary = @{\n    (NSString *)kCFNetworkProxiesHTTPEnable: [NSNumber numberWithInt: 1],\n    (NSString *)kCFNetworkProxiesHTTPProxy: @"127.0.0.1",\n    (NSString *)kCFNetworkProxiesHTTPPort: [NSNumber numberWithInt: 8888]\n};\n[configuration setConnectionProxyDictionary:connectionProxyDictionary];\nNSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];\n
Run Code Online (Sandbox Code Playgroud)\n
let configuration = URLSessionConfiguration.default\nconfiguration.connectionProxyDictionary = [\n    kCFNetworkProxiesHTTPEnable: true,\n    kCFNetworkProxiesHTTPProxy: "127.0.0.1",\n    kCFNetworkProxiesHTTPPort: 8888\n]\nlet session = URLSession(configuration: configuration)\n
Run Code Online (Sandbox Code Playgroud)\n

如果您使用 HTTPS 代理,您可能必须坚持使用已弃用的密钥:

\n
NSURLSessionConfiguration *configuration = NSURLSessionConfiguration.defaultSessionConfiguration;\nNSDictionary * connectionProxyDictionary = @{\n    @"HTTPSEnable": [NSNumber numberWithInt: 1],\n    (NSString *)kCFStreamPropertyHTTPSProxyHost: @"127.0.0.1",\n    (NSString *)kCFStreamPropertyHTTPSProxyPort: [NSNumber numberWithInt: 8888]\n};\n[configuration setConnectionProxyDictionary:connectionProxyDictionary];\nNSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];\n
Run Code Online (Sandbox Code Playgroud)\n
let configuration = URLSessionConfiguration.default\nconfiguration.connectionProxyDictionary = [\n    "HTTPSEnable": true,\n    kCFStreamPropertyHTTPSProxyHost: "127.0.0.1",\n    kCFStreamPropertyHTTPSProxyPort: 8888\n]\nlet session = URLSession(configuration: configuration)\n
Run Code Online (Sandbox Code Playgroud)\n

或使用各自的String常量:

\n
NSURLSessionConfiguration *configuration = NSURLSessionConfiguration.defaultSessionConfiguration;\nNSDictionary * connectionProxyDictionary = @{\n    @"HTTPSEnable": [NSNumber numberWithInt: 1],\n    @"HTTPSProxy": @"127.0.0.1",\n    @"HTTPSPort": [NSNumber numberWithInt: 8888]\n};\n[configuration setConnectionProxyDictionary:connectionProxyDictionary];\nNSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];\n
Run Code Online (Sandbox Code Playgroud)\n
let configuration = URLSessionConfiguration.default\nconfiguration.connectionProxyDictionary = [\n    "HTTPSEnable": true,\n    "HTTPSProxy": "127.0.0.1",\n    "HTTPSPort": 8888\n]\nlet session = URLSession(configuration: configuration)\n
Run Code Online (Sandbox Code Playgroud)\n

最后两种配置都可以工作。

\n