美文网首页
iOS App 通过代理服务器访问网络

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

作者: 舌尖上的大胖 | 来源:发表于2018-07-15 03:41 被阅读0次

总体思路

对于新版的 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
};

参考资料

(完)

相关文章

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

    总体思路 对于新版的 iOS 和 macOS,CocoaTouch 层级负责通讯的类是 NSURLSession,...

  • 抓包利器 - Charles 简单使用

    Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包...

  • nginx 学习

    反向代理 正向代理 隐藏真实客户端,内部网络通过正向代理服务器访问外部网络反向代理 隐藏真实服务端,外部网络通过反...

  • Charles工具的使用

    简介 Charles 通过将自己设置为系统的网络访问代理服务器,这样所有的网络请求都会通过它,从而实现了网路请求的...

  • iOS编程由于系统升级导致奔溃

    iOS9起,新特性要求App访问网络请求,要采用 HTTPS 协议。 解决办法(允许app采用http): iOS...

  • java中设置网络代理

    代理服务器概述 许多系统通过代理服务器访问Web,有时还会访问Internet的其它非HTTP部分。代理服务器接收...

  • 截取网络封包工具:Charles

    一、简介 Charles是在Mac下常用的网络封包截取工具。Charles通过将自己设置成系统的网络访问代理服务器...

  • Charles(青花瓷抓包工具)安装与使用教程

    一、准备工作 简介Charles是一款代理服务器,通过将自己设置成系统(电脑或者浏览器)的网络访问代理服务器,然后...

  • 如何在powershell 中使用代理服务器

    我司的代理服务器配置,是可以browser上访问,特定的app和cmd 访问外网需要单独设置代理服务器,对powe...

  • ios开发 9.0+ https协议问题

    ios引入了新特性 App Transport Security(ATS) 新特性要求App内访问的网络必须使用H...

网友评论

      本文标题:iOS App 通过代理服务器访问网络

      本文链接:https://www.haomeiwen.com/subject/lubupftx.html