AFN框架 之同时兼容Http和Https通讯 配置

目前很多APP都要求支持Https通讯,现在大多APP都是AFN框架之上实现的网络通讯层。
以下讨论了一下,AFN 框架之下,如何实现Http 和 Https兼容(都支持)。(这个知识点虽然不难,但是网上很少有一试就能成功的帖子)

现在网上有很多“iOS9与XCode7中不能使用http连接的解决办法”的贴子,

      做法如下:

  1.在项目左侧找到Info.plist文件,可以通过Filter来搜索

  2.在右侧点击Add Row添加NSAppTransportSecurity,类型为Dictionary,然后再添加子项目NSAllowsArbitraryLoads类行为                Boolean值为YES

  按照以上的操作,的确实现了http的支持。但是如果是通过第三方机构生成SSL数字证书比如(https://www.wosign.com/),要实现http,https在AFN构架下同时兼容还不行。(网上有一些通过生成证书,放在App里,实现https的通讯,个人不建议使用此用方案,因为AFN的官网上,指出了修改info.plist文件来实现https通讯。个人按照生成证书,调试AFN框架下的Https通讯,并没有成功)

建议直接用文本工作,打开Info.plist这个xml文件。直接配置如下图信息:

解释一下:

1> IOS9下,对http通讯支持需要添加:

  1. <key>NSAllowsArbitraryLoads</key>  
  2. <true/>  

2> 如果域名是www.baidu.com的接口,在AFN框架下,要支持https访问,需要添加:

  1. <key>NSExceptionDomains</key>  
  2. <dict>  
  3.     <key>www.baidu.com</key>  
  4. <dict>  
  5. <!--Include to allow subdomains-->  
  6. <key>NSIncludesSubdomains</key>  
  7. <true/>  
  8. <!--Include to allow HTTP requests-->  
  9. <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>  
  10. <true/>  
  11. <!--Include to specify minimum TLS version-->  
  12. <key>NSTemporaryExceptionMinimumTLSVersion</key>  
  13. <string>TLSv1.2</string>  
  14. </dict>  
  15. </dict>  


如果Https通信中,SSL数字证书是自己生成的AFN示例代码如下

  1. -(void)httpsForPrivateCer {  
  2.       
  3.     AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];  
  4.     // 是否允许,NO-- 不允许无效的证书  
  5.     [securityPolicy setAllowInvalidCertificates:YES];  
  6.     [securityPolicy setValidatesDomainName:NO];  
  7.       
  8.     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
  9.     manager.requestSerializer.timeoutInterval = 20;  
  10.       
  11.     manager.responseSerializer = [AFHTTPResponseSerializer serializer];  
  12.     manager.securityPolicy = securityPolicy;  
  13.   
  14.     [manager GET:URL parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject){  
  15.           
  16.         NSString *result = [[ NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];  
  17.           
  18.         NSLog(@"%@",result);  
  19.           
  20.     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
  21.           
  22.         NSLog(@"error come here");  
  23.           
  24.     }];  
  25.       
  26. }  


如果是通过第三方机构生成SSL数字证书比如(https://www.wosign.com/),AFN示例代码如下

  1. -(void)httpsForPublicCer {  
  2.     AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];  
  3.     // 是否允许,NO-- 不允许无效的证书  
  4.     [securityPolicy setAllowInvalidCertificates:YES];  
  5.     [securityPolicy setValidatesDomainName:NO];  
  6.       
  7.     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
  8.     manager.requestSerializer.timeoutInterval = 20;  
  9.       
  10.     manager.responseSerializer = [AFHTTPResponseSerializer serializer];  
  11.       
  12.     manager.securityPolicy = securityPolicy;  
  13.       
  14.     [manager POST:@"https://www.baidu.com/home/subscribe/data/manlotteryuserdata?indextype=manht&_req_seqid=0x933251bb0002c2f5&asyn=1&t=1458805039282&sid=18880_18285_1426_17943_18205_17000_15718_12187" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject){  
  15.           
  16.         NSString *result  =[[ NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];  
  17.           
  18.         NSLog(@"%@",result);  
  19.           
  20.     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
  21.           
  22.         NSLog(@"error come here");  
  23.           
  24.     }];  



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值