【问题标题】:Programmatically configure proxy settings in iOS在 iOS 中以编程方式配置代理设置
【发布时间】:2016-07-19 22:18:26
【问题描述】:

如何在 NSURLSession 中以编程方式在 iOS 中配置代理设置?我关注了这个link

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

【问题讨论】:

  • 你找到解决办法了吗?
  • 我也很感兴趣。我似乎无法在搜索引擎中找到任何内容,但我可能正在集思广益所有错误的关键字。

标签: ios objective-c ios9 nsurlsession


【解决方案1】:

Apple 开发者论坛上有 2 个帖子讨论此问题。

oldest one,表示我们应该使用kCFNetworkProxiesHTTPEnablekCFNetworkProxiesHTTPProxykCFNetworkProxiesHTTPPort 键而不是已弃用的kCFStreamPropertyHTTPProxyHostkCFStreamPropertyHTTPProxyPort。但这仅修复了有关 HTTP 代理设置的警告。

参考HTTPS代理密钥,有如下说法:

请提交带有详细信息的错误并继续使用已弃用的 现在的钥匙。

在线程的底部,这是:

AFAIK 你不需要匹配的“HTTPS”常量——OS X 仅——因为 iOS 会从另一个推断出一个。

但显然这不起作用。

the more recent thread 中,有一个响应使用常量字符串"HTTPSEnable""HTTPSProxy""HTTPSPort" 来代替这些键,用于HTTPS 情况。

因此,错误是 HTTPS 代理密钥不适用于 iOS 平台,或者新密钥无法按预期对 HTTPS 代理工作。

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

NSURLSessionConfiguration *configuration = NSURLSessionConfiguration.defaultSessionConfiguration;
NSDictionary * connectionProxyDictionary = @{
    (NSString *)kCFNetworkProxiesHTTPEnable: [NSNumber numberWithInt: 1],
    (NSString *)kCFNetworkProxiesHTTPProxy: @"127.0.0.1",
    (NSString *)kCFNetworkProxiesHTTPPort: [NSNumber numberWithInt: 8888]
};
[configuration setConnectionProxyDictionary:connectionProxyDictionary];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
let configuration = URLSessionConfiguration.default
configuration.connectionProxyDictionary = [
    kCFNetworkProxiesHTTPEnable: true,
    kCFNetworkProxiesHTTPProxy: "127.0.0.1",
    kCFNetworkProxiesHTTPPort: 8888
]
let session = URLSession(configuration: configuration)

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

NSURLSessionConfiguration *configuration = NSURLSessionConfiguration.defaultSessionConfiguration;
NSDictionary * connectionProxyDictionary = @{
    @"HTTPSEnable": [NSNumber numberWithInt: 1],
    (NSString *)kCFStreamPropertyHTTPSProxyHost: @"127.0.0.1",
    (NSString *)kCFStreamPropertyHTTPSProxyPort: [NSNumber numberWithInt: 8888]
};
[configuration setConnectionProxyDictionary:connectionProxyDictionary];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
let configuration = URLSessionConfiguration.default
configuration.connectionProxyDictionary = [
    "HTTPSEnable": true,
    kCFStreamPropertyHTTPSProxyHost: "127.0.0.1",
    kCFStreamPropertyHTTPSProxyPort: 8888
]
let session = URLSession(configuration: configuration)

或使用它们各自的String 常量:

NSURLSessionConfiguration *configuration = NSURLSessionConfiguration.defaultSessionConfiguration;
NSDictionary * connectionProxyDictionary = @{
    @"HTTPSEnable": [NSNumber numberWithInt: 1],
    @"HTTPSProxy": @"127.0.0.1",
    @"HTTPSPort": [NSNumber numberWithInt: 8888]
};
[configuration setConnectionProxyDictionary:connectionProxyDictionary];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
let configuration = URLSessionConfiguration.default
configuration.connectionProxyDictionary = [
    "HTTPSEnable": true,
    "HTTPSProxy": "127.0.0.1",
    "HTTPSPort": 8888
]
let session = URLSession(configuration: configuration)

最后两种配置都可以。

【讨论】:

    猜你喜欢
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多