iOS App 通過代理服務(wù)器訪問網(wǎng)絡(luò)

總體思路

對(duì)于新版的 iOS 和 macOS,CocoaTouch 層級(jí)負(fù)責(zé)通訊的類是 NSURLSession,如果需要通過代理訪問網(wǎng)絡(luò),是需要指定其 configuration 屬性,configuration 的類型是 NSURLSessionConfiguration。
  將 NSURLSessionConfigurationconnectionProxyDictionary 屬性指定為相應(yīng)的 Dictionary。

網(wǎng)上找到的代碼

/**
 * 代理設(shè)置
 */
- (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;
}

代碼編譯時(shí)會(huì)發(fā)現(xiàn),kCFStreamPropertyHTTPProxyHost 等常量已經(jīng)被標(biāo)為 Deprecated,會(huì)有警告。

滿足代碼潔癖

根據(jù)幫助文件的描述,在 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 中的有些常量,只標(biāo)識(shí)為 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
};

參考資料

(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用到的組件 1、通過CocoaPods安裝 2、第三方類庫安裝 3、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 15,207評(píng)論 1 180
  • 在遼寧有一座城市 是鞍山 在鞍山有一所學(xué)校 叫鞍藝口才 這里是藝術(shù)的殿堂 這里是語言的搖籃 一朵朵鮮花在這里綻放 ...
    美西xyy閱讀 1,721評(píng)論 0 0
  • 苔痕階綠,瓦礫墻檐舊。巷弄人家民風(fēng)淳,曲徑通幽添靜。山藥即曬庭中,葳蕤碧葉偏生。拾碎光陰念故,朦朧小鎮(zhèn)依舊。
    KenChoi閱讀 343評(píng)論 2 3
  • 從來沒想過,我也會(huì)對(duì)時(shí)間流逝之瞬息變幻有所感慨,95后的大多數(shù)都已然成年,可我們?cè)谀撤N程度上依舊幼稚。 內(nèi)心抗...
    ChesyWang閱讀 248評(píng)論 0 2
  • 一歲的小孩會(huì)做什么?要吃奶,要抱。 兩歲的小孩會(huì)做什么?會(huì)走路,會(huì)講話。 三歲的小孩會(huì)做什么?愛聽故事,愛吃冰激凌...
    Easen的卡片寫作人生閱讀 407評(píng)論 0 0

友情鏈接更多精彩內(nèi)容