NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

摘要由CSDN通过智能技术生成
  登录
 欢迎来到 xinpureZhu 的博客。。。

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

 iOS  xinpureZhu   9个月前 (10-23)   4749℃   0评论

错误描述

环境:

   
   
  1. iOS9 / Xcode7, Cordova

错误提示:

   
   
  1. NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

百度/Google之后 不难发现报错的原因

这是因为 iOS9 增加了新特性 App Transport Security (ATS)。详情:App Transport Security (ATS)

新特性要求 App 内访问的网络必须使用HTTPS协议并且改成 TLS1.2 协议进行传输

解决方法

网上提供了一种方不遵循 iOS9 新特性的规则,将 AppTransportSecurity 转为使用用户自定义的设置的方法,据说可以解决此问题~

讲的最多的一种方法就是修改 (...)/platforms/ios/YOURAPP/YOURAPP-Info.plist 文件,添加以下代码:

   
   
  1. <key>NSAppTransportSecurity</key>
  2. <dict>
  3. <key>NSAllowsArbitraryLoads</key>
  4. <true/>
  5. </dict>

还有一种修改 info.list 文件的方法:

   
   
  1. <key>NSAppTransportSecurity</key>
  2. <dict>
  3. <key>NSExceptionDomains</key>
  4. <dict>
  5. <key>YOUDOMAIN(e.g. baidu.com)</key>
  6. <dict>
  7. <key>NSIncludesSubdomains</key>
  8. <true/>
  9. <key>NSExceptionRequiresForwardSecrecy</key>
  10. <false/>
  11. </dict>
  12. </dict>
  13. </dict>

然而这两种方法,我都测试过,并没有什么用。。。

只能再找方法试试了,找到了这个:修改 (...)/platforms/ios/嘎嚓嘎嚓/Classes/AppDelegate.m 文件,添加以下代码:

   
   
  1. @implementation NSURLRequest(DataController)
  2. + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
  3. {
  4. return YES;
  5. }
  6. @end

哈哈。。。果然有用,简直 Nice!

不过,info.list 文件是之前修改过的,然后就觉得是不是只需要修改 AppDelegate.m 文件就可以呢?

经过验证是不行的,必须同时修改 info.list 和 AppDelegate.m 文件才可以解决此问题。

info.list 添加第一种代码即可:

   
   
  1. <key>NSAppTransportSecurity</key>
  2. <dict>
  3. <key>NSAllowsArbitraryLoads</key>
  4. <true/>
  5. </dict>

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值