AFNetworking2.0和AFNetworking3.0 的HTTPS的配置
前言:
由于苹果声明在前说是2017.01.01之后提交审核的APP,必须使用HTTPS请求,要不就直接驳回审核,吓得我们年前赶紧提交了一个版本,想着年后在弄这个https,结果又有消息说是苹果推迟了这个要求,大家还可以继续使用http,至于时间好像是还没有公布,不过人家既然都这么说了,看来早晚还是要用https的,就趁着刚开年不是太忙,就把这个给配置一下。首先我要说下这个配置我是弄了一天的,至于为什么弄了这么久,是因为我和后台说好的用正式服测,结果给了我一个测试服的证书,害的我弄了快一天了才忽然发现原来域名不对,重新让后台做了个证书给我,就立马好了。
这是我从开始着手弄到请求正常遇到的不懂的点,因为一开始完全是懵逼的状态
- https比http牛逼、更安全,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。
- 前端如何和后端“沟通”呢?1、公司有钱的直接买个证书,前段把证书导入到项目加一段代码就OK了(是不是想骂人),因为我在查资料时一般都是说的很简单,结果自己还是不懂。一会后面说怎么加代码。2、公司没钱或不想掏钱的就让服务器人员自己建一个(有的公司有运维的是运维建),至于怎么建咱们就不管了。
- 其他一些问题我也忘了,不过下面我一步一步的讲解吧。
我不配图片了。
配置开始:
无论AF是2.0还是3.0的都需要完成前面步骤:
1.给后台人员或运维人员沟通,向他们所要一个.cer的证书文件,至于网上还有什么其他的CA文件、其他格式文件的,不用管,先保存到桌面。
2.回到桌面,双击此.cer文件(如果没有感觉就多双击几次也没有关系),然后打开钥匙串访问,找到你刚才添加的证书(有可能是域名、有可能是名称,实在找不到就在钥匙串访问界面右上角点击搜索,一般好像是域名的,如:139.196.什么什么的),找到后右键,导出此证书(格式也是.cer的)到桌面,现在桌面上有两个。cer格式的证书,为了不弄混淆,你可以把第一个(也就是你双击的那个蓝色的)删掉到垃圾桶里。
3。把桌面上仅有的一个.cer格式的证书,直接拖到你的工程里,位置自己随意,
4.开始工程里的操作,plist里的Allow Arbitrary Loads 改为 YES(这个不多说,不懂的网上一大堆),然后你的URL前缀要换成https://的,其他不用改。
5.开始分2.0和3.0的了,不管你封装不封装你的AF,反正需要的也就一段代码,同样也不区分GET和POST的,我以不封装的POST举例,各位看官各取所需吧:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//此处召唤https
manager.securityPolicy = [self customSecurityPolicy];
//urlString 是你的请求的URL(记得是https://开头的哦)
//param 是一个NSDictionary 是你的请求带的参数
[manager POST:urlString parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject){
NSLog(@"https请求成功");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"https请求失败,原因:%@",error);
}];
/***这是抽出来的方法,复制需看清***/
/**
* SSL校验
*/
- (AFSecurityPolicy *)customSecurityPolicy
{
//导入证书后,找到证书的路径 ()
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"这是你证书的名字(不是域名)" ofType:@"cer"];
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
//AFSSLPinningModeCertificate 使用证书验证模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
//allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
//如果是需要验证自建证书,需要设置为YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要验证域名,默认为YES;
//假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
//置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的。
//如置为NO,建议自己添加对应域名的校验逻辑。
securityPolicy.validatesDomainName = NO;
securityPolicy.pinnedCertificates = @[certData];
return securityPolicy;
}
OK,如果按照步骤应该是已经能调通了的。加入报code = 1202 或 说证书无效,域名无效或危险的,或说将要前往隐藏域名什么什么的,这些是证书不正确(意思就是证书上的域名和你请求的域名不一致,需要按证书的域名来)
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//此处召唤https
manager.securityPolicy = [self customSecurityPolicy];
//strUrl 是你的请求的URL(记得是https://开头的哦)
//dic 是一个NSDictionary 是你的请求带的参数
[manager POST:strUrl parameters:dic progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"进度");
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"成功");
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失败:%@",error);
}];
/***这是抽出来的方法,复制需看清***/
/**
* SSL校验
*/
- (AFSecurityPolicy *)customSecurityPolicy
{
//先导入证书,找到证书的路径
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"这是你证书的名字(不是域名)" ofType:@"cer"];
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
//AFSSLPinningModeCertificate 使用证书验证模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
//allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
//如果是需要验证自建证书,需要设置为YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要验证域名,默认为YES;
//假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
//置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的。
//如置为NO,建议自己添加对应域名的校验逻辑。
securityPolicy.validatesDomainName = NO;
NSSet *set = [[NSSet alloc] initWithObjects:certData, nil];
securityPolicy.pinnedCertificates = set;
return securityPolicy;
}
OK,如果按照步骤应该是已经能调通了的。加入报code = 1202 或 说证书无效,域名无效或危险的,或说将要前往隐藏域名什么什么的,这些是证书不正确(意思就是证书上的域名和你请求的域名不一致,需要按证书的域名来)
至此, 已经完成了以AFNetworking为基础的HTTPS的配置,配置好后,其实还是很容易的,只不过网上的说法或教程留的隐藏的坑太多,更多心得前往博主首页,感谢AF的网络框架,感谢看到这篇心得的朋友,希望能帮到你们。感谢所有。(纯手打)如有不明白的可以问我
AFNetworking2.0和AFNetworking3.0 的HTTPS的配置的更多相关文章
- iOS 适配https(AFNetworking3.0为例)
众所周知,苹果有言,从2017年开始,将屏蔽http的资源,强推https楼主正好近日将http转为https,给还没动手的朋友分享一二 1.准备证书 首先找后台要一个证书(SSL证书,一般你跟后台说 ...
- iOS开发--基于AFNetWorking3.0的图片缓存分析
图片在APP中占有重要的角色,对图片做好缓存是重要的一项工作.[TOC] 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.C ...
- iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载
官方建议AFN的使用方法 0.导入框架准备工作 •1. 将AFNetworking3.0+框架程序拖拽进项目 •2. 或使用Cocopod 导入AFNetworking3.0+ •3. ...
- AFNetworking3.0+MBProgressHUD二次封装,一句话搞定网络提示
对AFNetworking3.0+MBProgressHUD的二次封装,使用更方便,适用性非常强: 一句话搞定网络提示: 再也不用担心网络库更新后,工程要修改很多地方了!网络库更新了只需要更新这个封装 ...
- 基于AFNetworking3.0网络封装
概述 对于开发人员来说,学习网络层知识是必备的,任何一款App的开发,都需要到网络请求接口.很多朋友都还在使用原生的NSURLConnection一行一行地写,代码到处是,这样维护起来更困难了. 对于 ...
- iOS_SN_基于AFNetworking3.0网络封装
转发文章,原地址:http://www.henishuo.com/base-on-afnetworking3-0-wrapper/?utm_source=tuicool&utm_medium= ...
- 【转载】基于AFNetWorking3.0的图片缓存分析
原文出处: Yasin的简书 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.CoreData…).我们常说的网络请求缓存包 ...
- IOS 网络浅析-(十一 三方 AFNetworking3.0简介)
AFNetworking3.0是目前最新的版本,本来打算介绍一下2.6,但是想想2.6名不久矣,就决定不介绍了,有兴趣的小伙伴可以上网查一查.下面我就开始进入正题了. 目前使用人数最多的第三方网络库, ...
- 网络婚礼之AFNetWorking3.0
目前使用人数最多的第三方网络库,没有之一.从开始的NSURLConnection到现在的NSURLSession,它都一直保持着与苹果的步调一致,而由它也衍生出大量的相关第三方网络功能库,不仅仅因为他 ...
随机推荐
- HUST 1351 Group
(莫名其妙的被一个叫布布扣的网站收录了......什么鬼) 简单DP.dp[i][j]表示把前i个数字分成j段的最优解, 递推式很容易写: (其中sum[]是前缀和:p <= i - L,并且前 ...
- 【转】git命令
Git使用 1. git pull 更新服务器代码到本地a). git pull origin master是将origin这个版本库的代码更新到本地的master主分支 2. git push ...
- iOS UICollectionView 长按移动cell
ref:http://www.jianshu.com/p/31d07bf32d62 iOS 9之后: 示例如下 效果 前言: 看完你可以学到哪些呢? 就是文章标题那么多, 只有那么多. . 手残效果图 ...
- NLPIR中文分词器的使用
一.普通java项目 (1)添加项目jar包 File -> Project Structure Libarries 添加jar包jna-4.0.0.jar (2)将Data文件夹复制到 ...
- php连接mysql数据库(新浪云SAE)
新浪云提供了免费的创建服务器端应用的服务.网址为:https://www.sinacloud.com/ 在上面创建好应用,然后在本地使用记事本编写应用的代码如下: <?php echo &quo ...
- bootstrap tab标签页
<ul id="myTab" class="nav nav-tabs"> <li class="active"> & ...
- java实现——003二维数组中的查找
import java.util.Scanner; public class T003 { public static void main(String[] args) { Scanner in = ...
- 写了一个复杂的sql语句
$sp_sql = "select sp_ProductNo, sp_ProductName,sp_Standard,sp_Unit,sum(sp_Amount) as amount fro ...
- python 开发者 精品
当 Python 和 R 遇上北京二手房 http://mp.weixin.qq.com/s?timestamp=1473262097&src=3&ver=1&signatur ...
- GB和GBDT 算法流程及分析
1.优化模型的两种策略: 1)基于残差的方法 残差其实就是真实值和预测值之间的差值,在学习的过程中,首先学习一颗回归树,然后将“真实值-预测值”得到残差,再把残差作为一个学习目标,学习下一棵回归树,依 ...