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
Protocol Secure)是超文本传输协议和SSL/TLS的组合。
HTTPS的主要思想是在不安全的网络上创建一安全信道。并可在使用适当的加密包和server证书可被验证且可被信任时。对窃听和中间人攻击提供合理的保护。
HTTPS的信任继承基于预先安装在浏览器中的证书颁发机构(如VeriSign、Microsoft等)(意即“我信任证书颁发机构告诉我应该信任的”)。
因此。一个到某站点的HTTPS连接可被信任,假设server搭建自己的https
也就是说採用自认证的方式来建立https信道,这样一般在client是不被信任的。所以我们一般在浏览器訪问一些https网站的时候会有一个提示,问你是否继续。
使用webview载入https网站的时候,也会出现这种情况。也就是说我们必须在请求的时候将该网站设置为安全的,才干继续訪问
所以我们须要在webview開始载入网页的时候首先推断推断该网站是不是https网站。假设是的话,先然他暂停载入,先用
NSURLConnection 来訪问改网站,然后再身份验证的时候,将该网站置为可信任网站。
然后在用webview又一次载入请求。
- #pragma mark - UIWebViewDelegate
- - (BOOL)webView:(UIWebView *)awebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
- {
- NSString* scheme = [[request URL] scheme];
- NSLog(@"scheme = %@",scheme);
- //推断是不是https
- if ([scheme isEqualToString:HTTPS]) {
- //假设是https:的话,那么就用NSURLConnection来重发请求。从而在请求的过程其中吧要请求的URL做信任处理。
- if (!self.isAuthed) {
- originRequest = request;
- NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
- [conn start];
- [awebView stopLoading];
- return NO;
- }
- }
- [self reflashButtonState];
- [self freshLoadingView:YES];
- NSURL *theUrl = [request URL];
- self.currenURL = theUrl;
- return YES;
- }
在NSURLConnection 代理方法中处理信任问题。
- - (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
- {
- if ([challenge previousFailureCount]== 0) {
- _authed = YES;
- //NSURLCredential 这个类是表示身份验证凭据不可变对象。凭证的实际类型声明的类的构造函数来确定。
- NSURLCredential* cre = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
- [challenge.sender useCredential:cre forAuthenticationChallenge:challenge];
- }
- else<pre name="code" class="objc">
最后在NSURLConnection 代理方法中收到响应之后,再次使用web view载入https网站。
- pragma mark ================= NSURLConnectionDataDelegate <NSURLConnectionDelegate>
- - (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
- {
- NSLog(@"%@",request);
- return request;
- }
- - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
- {
- self.authed = YES;
- //webview 又一次载入请求。
- [webView loadRequest:originRequest];
- [connection cancel];
- }
推荐两个stackoverflow地址:
http://stackoverflow.com/questions/20365774/call-https-url-in-uiwebview
iOS UIWebView 载入https 网站出现NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL,的更多相关文章
- 微信H5页面嵌入百度地图---解决手机的webKit定位,ios系统对非https网站不提供支持问题
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=yGQt ...
- NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
本篇文章由:http://xinpure.com/nsurlsessionnsurlconnection-http-load-failed-kcfstreamerrordomainssl-9802/ ...
- iOS UIWebView 访问https 绕过证书验证的方法
在文件开始实现 allowsAnyHTTPSCertificateForHost 方法 @implementation NSURLRequest (NSURLRequestWithIgnoreSSL ...
- iOS UIWebView 访问https绕过证书验证的方法
@implementation NSURLRequest (NSURLRequestWithIgnoreSSL) + (BOOL)allowsAnyHTTPSCertificateForHost:(N ...
- #iOS问题记录#关于NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
响应Apple的号召,将APP里的HTTP请求全部升级为HTTPS,一切配置OK,正常的请求也没问题: 但,当使用SDwebImg缓存图片时,遇到了标题写的问题: 根据资料得: 这个问题的出现是因为i ...
- iOS ---------NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
遇到此问题的解决办法: 使用<NSURLSessionDelegate>中的didReceiveChallenge方法,方法中的代码如下: - (void)URLSession:(NSUR ...
- 升级Xcode7&iOS9后,出现NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -980X)
在info.plist里面添加如下内容即可: <key>NSAppTransportSecurity</key> <dict> <key>NSAllow ...
- iOS9中关于 NSURLSession/NSURLConnection HTTP load failed 的解决办法
最近为了新的存管app上线,忙了近一个月,重新过了一段996的日子,今天终于可以喘口气,继续更新博客了.本文记录一下在iOS 9中发送https请求遇到的问题及解决办法,希望通过本文,可以对ATS的配 ...
- ios 中使用https的知识
先看文章,这篇文章说的是使用AFNetworing进行https时的事项,十分好!http://blog.cnbang.net/tech/2416/ ios中使用https,主要就是使用NSURLCr ...
随机推荐
- linux内核编译环境配置
linux内核编译环境配置 如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可.即是/lib/modules/`uname -r`/build -> /usr/src/ ...
- Centos 7 学习之静态IP设置
原文链接:http://blog.csdn.net/johnnycode/article/details/40624403 本学习主要针对 Centos 7.0.1406 版本进行学习整理! 如果你使 ...
- Mysql rr和rc隔离
REPEATABLE READ This is the default isolation level for InnoDB. For consistent reads, there is an im ...
- Python语言总结 4.2. 和字符串(str,unicode等)处理有关的函数
4.2.7. 去除控制字符:removeCtlChr Python语言总结4.2. 和字符串(str,unicode等)处理有关的函数Sidebar Prev | Up | Next4.2.7 ...
- stm32 ARM中的RO、RW和ZI DATA
一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将 ...
- WOJ 1020
#include<stdio.h> #include<stdlib.h> int main() { int n,m; int *num,*link; int i,j,t,k=0 ...
- JAVA - 优雅的记录日志(log4j实战篇) (转)
写在前面 项目开发中,记录错误日志有以下好处: 方便调试 便于发现系统运行过程中的错误 存储业务数据,便于后期分析 在java中,记录日志有很多种方式: 自己实现 自己写类,将日志数据,以io操作方式 ...
- 肯德基champs各个字母代表什么_百度知道
肯德基champs各个字母代表什么_百度知道 肯德基champs各个字母代表什么
- Java使用Socket传输文件遇到的问题
1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决 ...
- cocos2dx使用tolua关于字符串处理的一个问题
正在使用cocos2dx的tolua binding在此过程中发现的一个问题.假设一回或输入是std::string当我们不同意包括二进制数据,和std::string我同意,这样一来就导致了不正确的 ...