sas*_*mar 13 objective-c ios nsurlsession ios9
如何在 iOS 中以编程方式配置代理设置NSURLSession?我跟着这个链接。
但似乎kCFStreamPropertyHTTPProxyHost,kCFStreamPropertyHTTPProxyPort都被弃用了iOS 9。那么以编程方式创建代理的方法是什么?
Apple 开发者论坛中有 2 个主题涉及此问题。
\n最旧的一个,表明我们应该使用kCFNetworkProxiesHTTPEnable,kCFNetworkProxiesHTTPProxy和kCFNetworkProxiesHTTPPort键来代替已弃用的kCFStreamPropertyHTTPProxyHost和kCFStreamPropertyHTTPProxyPort。但这仅修复了有关 HTTP 代理设置的警告。
关于HTTPS代理密钥,有以下说法:
\n\n\n请提交包含详细信息的错误,并暂时继续使用已弃用的\n密钥。
\n
在线程的底部,这个:
\n\n\nAFAIK 你不需要匹配的 \xe2\x80\x98HTTPS\xe2\x80\x99 常量\xe2\x80\x94这是 OS X\only \xe2\x80\x94 因为 iOS 从另一个推断一个。
\n
但显然这不起作用。
\n在最近的线程中,有一个响应,而不是这些键,使用常量字符串"HTTPSEnable","HTTPSProxy"并且"HTTPSPort"用于 HTTPS 情况。
因此,该错误要么是 HTTPS 代理密钥不可用于 iOS 平台,要么是新密钥无法按 HTTPS 代理的预期工作。
\n据我所知,如果您使用 HTTP 代理,则可以肯定避免警告,如下所示:
\nNSURLSessionConfiguration *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];\nRun Code Online (Sandbox Code Playgroud)\nlet configuration = URLSessionConfiguration.default\nconfiguration.connectionProxyDictionary = [\n kCFNetworkProxiesHTTPEnable: true,\n kCFNetworkProxiesHTTPProxy: "127.0.0.1",\n kCFNetworkProxiesHTTPPort: 8888\n]\nlet session = URLSession(configuration: configuration)\nRun Code Online (Sandbox Code Playgroud)\n如果您使用 HTTPS 代理,您可能必须坚持使用已弃用的密钥:
\nNSURLSessionConfiguration *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];\nRun Code Online (Sandbox Code Playgroud)\nlet configuration = URLSessionConfiguration.default\nconfiguration.connectionProxyDictionary = [\n "HTTPSEnable": true,\n kCFStreamPropertyHTTPSProxyHost: "127.0.0.1",\n kCFStreamPropertyHTTPSProxyPort: 8888\n]\nlet session = URLSession(configuration: configuration)\nRun Code Online (Sandbox Code Playgroud)\n或使用各自的String常量:
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];\nRun Code Online (Sandbox Code Playgroud)\nlet configuration = URLSessionConfiguration.default\nconfiguration.connectionProxyDictionary = [\n "HTTPSEnable": true,\n "HTTPSProxy": "127.0.0.1",\n "HTTPSPort": 8888\n]\nlet session = URLSession(configuration: configuration)\nRun Code Online (Sandbox Code Playgroud)\n最后两种配置都可以工作。
\n