iOS App 通过代理服务器访问网络

总体思路

对于新版的 iOS 和 macOS,CocoaTouch 层级负责通讯的类是 NSURLSession,如果需要通过代理访问网络,是需要指定其 configuration 属性,configuration 的类型是 NSURLSessionConfiguration
  将 NSURLSessionConfigurationconnectionProxyDictionary 属性指定为相应的 Dictionary。

网上找到的代码

/**
 * 代理设置
 */
- (NSURLSessionConfiguration *)setProxyWithConfig
{
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
    config.connectionProxyDictionary = @
    {
        @"HTTPEnable":@YES,
        (id)kCFStreamPropertyHTTPProxyHost:@"127.0.0.1",
        (id)kCFStreamPropertyHTTPProxyPort:@80,
        @"HTTPSEnable":@YES,
        (id)kCFStreamPropertyHTTPSProxyHost:@"127.0.0.1",
        (id)kCFStreamPropertyHTTPSProxyPort:@80
    };
    
    return config;
}

代码编译时会发现,kCFStreamPropertyHTTPProxyHost 等常量已经被标为 Deprecated,会有警告。

满足代码洁癖

根据帮助文件的描述,在 CFNetwork 的 Global Proxy Settings Constants 部分,查询到一些常量,用于取代 Deprecated 的常量。

CFNetwork/CFProxySupport.h CFNetwork/CFHTTPStream.h CFNetwork/CFSocketStream.h
@"HTTPEnable" kCFNetworkProxiesHTTPEnable N/A
@"HTTPProxy" kCFNetworkProxiesHTTPProxy kCFStreamPropertyHTTPProxyHost
@"HTTPPort" kCFNetworkProxiesHTTPPort kCFStreamPropertyHTTPProxyPort
@"HTTPSEnable" kCFNetworkProxiesHTTPSEnable N/A
@"HTTPSProxy" kCFNetworkProxiesHTTPSProxy kCFStreamPropertyHTTPSProxyHost
@"HTTPSPort" kCFNetworkProxiesHTTPSPort kCFStreamPropertyHTTPSProxyPort
@"SOCKSEnable" kCFNetworkProxiesSOCKSEnable N/A
@"SOCKSProxy" kCFNetworkProxiesSOCKSProxy kCFStreamPropertySOCKSProxyHost
@"SOCKSPort" kCFNetworkProxiesSOCKSPort kCFStreamPropertySOCKSProxyPort

但是,由于 CFNetwork/CFProxySupport.h 中的有些常量,只标识为 macOS 可用,iOS 上是访问不到的,所以可以直接写为字符串常量。

config.connectionProxyDictionary = @
{
    @"HTTPEnable": @YES,
    @"HTTPProxy": @"127.0.0.1",
    @"HTTPPort": @80,
    @"HTTPSEnable": @YES,
    @"HTTPSProxy": @"127.0.0.1",
    @"HTTPSPort": @80,
    @"SOCKSEnable": @YES,
    @"SOCKSProxy": @"127.0.0.1",
    @"SOCKSPort": @80
};

参考资料

(完)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,766评论 1 180
  • 在辽宁有一座城市 是鞍山 在鞍山有一所学校 叫鞍艺口才 这里是艺术的殿堂 这里是语言的摇篮 一朵朵鲜花在这里绽放 ...
    美西xyy阅读 1,647评论 0 0
  • 苔痕阶绿,瓦砾墙檐旧。巷弄人家民风淳,曲径通幽添静。山药即晒庭中,葳蕤碧叶偏生。拾碎光阴念故,朦胧小镇依旧。
    KenChoi阅读 317评论 2 3
  • 从来没想过,我也会对时间流逝之瞬息变幻有所感慨,95后的大多数都已然成年,可我们在某种程度上依旧幼稚。 内心抗...
    ChesyWang阅读 223评论 0 2
  • 一岁的小孩会做什么?要吃奶,要抱。 两岁的小孩会做什么?会走路,会讲话。 三岁的小孩会做什么?爱听故事,爱吃冰激凌...
    Easen的卡片写作人生阅读 359评论 0 0