CFNetwork读取iOS设备的代理设置

来源:互联网 发布:马尔科夫人力资源矩阵 编辑:程序博客网 时间:2024/06/04 23:56


转载自:http://www.cocoachina.com/ios/20111118/3538.html

公司网络很多都是有代理设置的,如果设备通过wifi上网,就要过公司网络代码。

于是想到一个问题:如何读取iOS设备的代理设置?

用过ASIHTTPRequest这个开源网络库,它可以读取代理设置,于是我在源码中发现读取代理设置的方法,我已把代码提取出来:

 

NSDictionary *proxySettings = NSMakeCollectable([(NSDictionary *)CFNetworkCopySystemProxySettings() autorelease]); 
NSArray *proxies = NSMakeCollectable([(NSArray *)CFNetworkCopyProxiesForURL((CFURLRef)[NSURL URLWithString:@"http://www.google.com"], (CFDictionaryRef)proxySettings) autorelease]); 
NSDictionary *settings = [proxies objectAtIndex:0]; 
NSLog(@"host=%@", [settings objectForKey:(NSString *)kCFProxyHostNameKey]); 
NSLog(@"port=%@", [settings objectForKey:(NSString *)kCFProxyPortNumberKey]); 
NSLog(@"type=%@", [settings objectForKey:(NSString *)kCFProxyTypeKey]);

 

需要CFNetwork.framework

注意:实际使用该段代码时,经系统错误提示,需要使用到__bridge

    NSDictionary *proxySettings = NSMakeCollectable((__bridge CFTypeRef)([(__bridge NSDictionary *)CFNetworkCopySystemProxySettings() autorelease]));
    NSArray *proxies = NSMakeCollectable((__bridge CFTypeRef)([(NSArray *)CFNetworkCopyProxiesForURL((CFURLRef)[NSURL URLWithString:@"http://www.baidu.com"], (__bridge CFDictionaryRef)proxySettings) autorelease]));

另外,对于autorelease,如果项目设置了ARC,可以在Target-》Build Phase-》Compile Source中将相应的非ARC文件,

Compiler Flag改为-fno-objc-arc即可。

0 0