前言:

由于苹果声明在前说是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举例,各位看官各取所需吧:

AFNetworking 2.0

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 或 说证书无效,域名无效或危险的,或说将要前往隐藏域名什么什么的,这些是证书不正确(意思就是证书上的域名和你请求的域名不一致,需要按证书的域名来)

AFNetworking 3.0

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的配置的更多相关文章

  1. iOS 适配https(AFNetworking3.0为例)

    众所周知,苹果有言,从2017年开始,将屏蔽http的资源,强推https楼主正好近日将http转为https,给还没动手的朋友分享一二 1.准备证书 首先找后台要一个证书(SSL证书,一般你跟后台说 ...

  2. iOS开发--基于AFNetWorking3.0的图片缓存分析

    图片在APP中占有重要的角色,对图片做好缓存是重要的一项工作.[TOC] 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.C ...

  3. iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载

    官方建议AFN的使用方法   0.导入框架准备工作 •1. 将AFNetworking3.0+框架程序拖拽进项目   •2. 或使用Cocopod 导入AFNetworking3.0+   •3.   ...

  4. AFNetworking3.0+MBProgressHUD二次封装,一句话搞定网络提示

    对AFNetworking3.0+MBProgressHUD的二次封装,使用更方便,适用性非常强: 一句话搞定网络提示: 再也不用担心网络库更新后,工程要修改很多地方了!网络库更新了只需要更新这个封装 ...

  5. 基于AFNetworking3.0网络封装

    概述 对于开发人员来说,学习网络层知识是必备的,任何一款App的开发,都需要到网络请求接口.很多朋友都还在使用原生的NSURLConnection一行一行地写,代码到处是,这样维护起来更困难了. 对于 ...

  6. iOS_SN_基于AFNetworking3.0网络封装

    转发文章,原地址:http://www.henishuo.com/base-on-afnetworking3-0-wrapper/?utm_source=tuicool&utm_medium= ...

  7. 【转载】基于AFNetWorking3.0的图片缓存分析

    原文出处: Yasin的简书 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.CoreData…).我们常说的网络请求缓存包 ...

  8. IOS 网络浅析-(十一 三方 AFNetworking3.0简介)

    AFNetworking3.0是目前最新的版本,本来打算介绍一下2.6,但是想想2.6名不久矣,就决定不介绍了,有兴趣的小伙伴可以上网查一查.下面我就开始进入正题了. 目前使用人数最多的第三方网络库, ...

  9. 网络婚礼之AFNetWorking3.0

    目前使用人数最多的第三方网络库,没有之一.从开始的NSURLConnection到现在的NSURLSession,它都一直保持着与苹果的步调一致,而由它也衍生出大量的相关第三方网络功能库,不仅仅因为他 ...

随机推荐

  1. Servlet实现文件上传(多文件)(三)

    1.上传文件的页面fileUpload2.jsp <%@ page language="java" import="java.util.*" pageEn ...

  2. 五、pig学习

    一.什么是pig 1.pig和sql.map-reduce的关系 来自为知笔记(Wiz)

  3. ZOJ 3935 2016

    简单规律题...没看懂题目直接从输出中找到了规律. 先不管是不是闰年,前后两项的差值会形成一个等差数列,公差是64... 输出的时候再判一下闰年即可. #include<cstdio> # ...

  4. UIResponder学习

    http://blog.csdn.net/jimzhai/article/details/23283515 UIResponder 介绍 UIResponder 这个类定义了很多用来处理响应和时间处理 ...

  5. S3C2440启动代码2440init.s彻底解析

    可以选择nand启动和nor启动,这两者之间的关系通过一个按键来选择 这个OM0有何玄机,在数据手册中有这么一段 位宽RAM启动了(当然,还得设置一些东西,下面就说), Nanaflash启动经历的过 ...

  6. MUI开发注意事项

    mui开发注意事项,有需要的朋友可以参考下. mui是一个高性能的HTML5开发框架,从UI到效率,都在极力追求原生体验:这个框架自身有一些规则,刚接触的同学不很熟悉,特总结本文:想了解mui更详细的 ...

  7. ASIHTTPRequest异步请求 分类: ios技术 2015-03-01 09:33 48人阅读 评论(0) 收藏

    我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好.因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用.异步请求的用户体验要比同步请求好,因此一般情 ...

  8. python实现断点续传下载文件

    最近的任务里有一个功能是要我从日志服务器实时跟新日志到本地,日志在不断新增内容就需要我隔一段时间从上次下载的位置继续下载,并写入本地文件上次写完的位置后面. headers = {'Range': ' ...

  9. linux java.net.UnknownHostException异常

    异常场景: 使用InetAddress.getLocalHost().getAddress(); 获取address byte数组.在windows上开发的时候,没有问题.部署到linux时报 jav ...

  10. 从损坏的wt文件中恢复出WiredTiger集合

    Reference: http://dev.guanghe.tv/2016/06/recovering-a-wiredtiger-collection-from-a-corrupt-wt-file.h ...