Https的数据请求的证书设置

对于https的网络请求很多人都比较头疼,不止iOS包括pc端和移动端的很多请求都离不开https

CFNetwork SSLHandshake failed (-9806)

error = Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “192.168.10.16” which could put your confidential information at risk."

遇到以上错误的请举手,没错这就是臭名昭著的https请求出现的错误。归结原因证书原因。但是如何设置呢,你会发现百度一下子废物了。现在就从iOS原生的网络请求着手解决这一问题.

研究了一下NSURLConnection这个类会发现一下两个代理

- (BOOL)connection:(NSURLConnection*)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace*)protectionSpace

- (void)connection:(NSURLConnection*)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge*)challenge

没错,iOS本身提供了对于https请求证书的设置,就在代理方法里。现在ok了,只要解决了代理的设置就可以完成完整的https请求

首先做好数据请求的相关准备



接着设置证书权限问题


看一下控制台输出

2013-11-02 14:07:07.719 HttpsRequest[485:70b] didReceiveAuthenticationChallenge NSURLAuthenticationMethodServerTrust 0

2013-11-02 14:07:07.720 HttpsRequest[485:70b] get the whole response

表明证书确实已经设置完成,现在可以做数据请求了



这里用的是NSURLConnection的代理方法来执行数据接受,因为块方法没办法做证书相关的设置

现在看一下请求回来的数据

returnString = [{"id":"52707093fc8712d98a867bcd","title":"八达岭长城走一走","date":1383177600000,"createUser":{"id":"18638097289","username":"lisi"},"state":"0"},{"id":"52707063fc8712d98a867bcc","title":"雍和宫一日游","date":1385856000000,"createUser":{"id":"18638097289","username":"lisi"},"state":"0"},{"id":"5270700cfc8712d98a867bca","title":"雍和宫逛一逛","date":1388361600000,"createUser":{"id":"18638097289","username":"lisi"},"state":"0"},{"id":"52707047fc8712d98a867bcb","title":"香山一日游","date":1388448000000,"createUser":{"id":"18638097289","username":"lisi"},"state":"0"}]

到这里为止,https的数据请求证书问题已经得到了解决。要说一下的是很多人会用AFNetwork的第三方,因为这个框架也是对NSURLConnection的封装和扩展,github上有对此类问题的细致说明,可以看看。这里只解决方向问题,细节问题还有待各位骚年自行研究


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值