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

本篇文章由:http://xinpure.com/nsurlsessionnsurlconnection-http-load-failed-kcfstreamerrordomainssl-9802/

错误描述

环境:

iOS9 / Xcode7, Cordova

错误提示:

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 文件,添加以下代码:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

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

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>YOUDOMAIN(e.g. baidu.com)</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>

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

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

@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
    return YES;
}
@end

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

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

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

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

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

参考链接

http://forum.ionicframework.com/t/nsurlsession-nsurlconnection-http-load-failed/32898

http://www.tuicool.com/articles/7bY3my

时间: 2024-11-10 04:02:41

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)的相关文章

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) 解决办法

可能是手机操作系统问题,之前iOS7没有遇到这种问题,iOS9就出现这个问题 在info.plist里面添加如下内容即可:

AFNetworking访问https出现&quot;NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813&quot;

使用AFNetworking来访问http请求非常方便快捷,最简单的请求代码如下: #import "HSTestHTTPSViewController.h" #import <AFNetworking/AFNetworking.h> @interface HSTestHTTPSViewController () @end @implementation HSTestHTTPSViewController - (void)viewDidLoad { [super viewD

AFNetworking访问https出现&quot;NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9806&quot;

在之前一篇博客中<AFNetworking访问https出现"NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813">,而在这篇博客中的这个bug也是非常的类似.出现的场景也是服务端使用了自签名的证书,然后客户端按照<AFNetworking访问https出现"NSURLSession/NSURLConnection HTTP load failed (kC

#iOS问题记录#关于NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)

响应Apple的号召,将APP里的HTTP请求全部升级为HTTPS,一切配置OK,正常的请求也没问题: 但,当使用SDwebImg缓存图片时,遇到了标题写的问题: 根据资料得: 这个问题的出现是因为ios9里对TLS的版本配置为1.2:而服务器使用Tomcat配置时,默认为1.0: 所以解决方法有两种: 方法1,服务器的配置文件,server.xml里奖TLS版本配置为1.2: 方法2,APP端,工程里的info.list 配置TLS的最低版本为1.0: 以下内容: <key>NSAppTra

iOS UIWebView 加载https站点出现NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL,

今天在加载https站点的时候遇到如下的错误问题.所以对自己之前写的iOS内嵌webview做了一些修改,可以让它加载http站点也可以让它加载https站点. 下面是我加载https站点的时候出现的错误. error:     NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813) HTTPS 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protoc

iOS UIWebView 载入https 网站出现NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL,

今天在载入https网站的时候遇到例如以下的错误问题.所以对自己之前写的iOS内嵌webview做了一些改动,能够让它载入http网站也能够让它载入https网站. 以下是我载入https网站的时候出现的错误. error:     NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813) HTTPS 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Prot

ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。

from matplotlib import pyplot as pltfrom sklearn.datasets import load_irisimport numpy as np data=load_iris()feature_names=data['featrue_names']target=data['target']for t.marker,c in zip(xrange(3),">ox","rgb"):    plt.scatter(featur

Python ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。

问题怎么出现的: 电脑是win8 64位,,下载了一个mysqldb 32位,http://sourceforge.net/projects/mysql-python/files/latest/download.安装后import MySQLdb 就出现了如题错误. 看了一个帖子,如下: 在windows上安装python mysql模块后,导入模块时报 python ImportError: DLL load failed: %1 不是有效的 Win32 应用程序 这个是因为你安装了64位的p

python ImportError: DLL load failed: %1 不是有效的 Win32 应用程序

今天折腾pandas的时候, 很想当然的认为是64位的系统, 理所当然的就下载了一个64位的二进制安装包, 结果安装一切正常, 在导入的时候报出了 ImportError 在windows上安装python 的模块后,导入模块时报 python ImportError: DLL load failed: %1 不是有效的 Win32 应用程序 这个是因为你安装了64位的python,然后安装32位的模块,或者你安装了32位的python,然后安装64位的模块 先确定自己的python是是多少位