AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。AFHTTPRequestOperationManager已经抛弃,所以需要对数据请求进行改动。

Get请求

 //使用代码
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:url parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
//成功
NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
//失败
}];
    • 当我们调用get函数之前,我们需要创建一个AFHTTPSessionManager,在之前我们使用的一般是AFHTTPRequestOperationManager.

       
    • 在调用get请求后,我们一般都不需要干什么了,因为那些繁琐复杂的网络通信都交给他去做了,他首先会调用AFNetworkReachabilityManager验证是否联网.
    • 然后参数序列化,用于网络请求.
    • 调用AFSecurityPolicy类,AFSecurityPolicy用于验证HTTPS请求的证书,简单来说建立连接.
    • 连接建立完成,证书验证成功,开始请求服务器.
    • 从服务器返回数据,解析服务器数据,将数据反序列化.
    • 我们得到data类型的数据,可以使用JSON解析直接解析成字典使用.弃用的类:
    •     AFURLConnectionOperation
      AFHTTPRequestOperation
      AFHTTPRequestOperationManager
    • 两者之间对比

      AFN2.0:

      NSURL *URL = [NSURL URLWithString:@""];
      NSURLRequest *request = [NSURLRequest requestWithURL:URL];
      AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
      op.responseSerializer = [AFJSONResponseSerializer serializer];
      [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
      NSLog(@"JSON: %@", responseObject);
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
      NSLog(@"Error: %@", error);
      }];
      [[NSOperationQueue mainQueue] addOperation:op];

      AFN3.0:

    • - (void)GETUrl:(NSString *)url parameters:(NSDictionary *)parameters success:(void (^)(id))success failure:(void (^)(NSError *))failure
      {
      if (!_sessionGetManager) {
      _sessionGetManager = [AFHTTPSessionManager manager];
      //设置请求格式
      _sessionGetManager.responseSerializer = [AFJSONResponseSerializer serializer];;
      }
      // 设置请求超时时间
      // _sessionGetManager.requestSerializer.timeoutInterval = 10;
      //设置允许接受返回数据类型
      _sessionGetManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json",@"text/plain", @"text/javascript", nil];
      NSLog(@"%@",url);
      [_sessionGetManager GET:url parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
      success(responseObject);
      } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
      NSLog(@"********%@",error);
      // if (task.state == 2) {
      // return ;
      // }
      failure(error);
      }]; }
    • - (void)POSTUrl:(NSString *)url parameters:(NSDictionary *)parameters success:(void (^)(id))success failure:(void (^)(NSError *))failure
      {
      if (!_sessionPostManager) {
      _sessionPostManager = [AFHTTPSessionManager manager];
      //接收数据类型 --->JSON
      _sessionPostManager.responseSerializer = [AFJSONResponseSerializer serializer]; }
      //接收数据类型 --->JSON
      _sessionPostManager.responseSerializer = [AFJSONResponseSerializer serializer];
      //访问超时时间
      _sessionPostManager.requestSerializer.timeoutInterval = .f; _sessionPostManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"text/plain",nil];
      NSLog(@"url =%@",url); [_sessionPostManager POST:url parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
      success(responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
      NSLog(@"%@",error);
      failure(error);
      }]; }

      AFN3.0下载方法:

      /**
      * AFN3.0 下载
      */
      - (void)downLoad{ //1.创建管理者对象
      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
      //2.确定请求的URL地址
      NSURL *url = [NSURL URLWithString:@"" //如果报接受类型不一致请替换一致text/html或别的
      manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; ]; //3.创建请求对象 NSURLRequest *request = [NSURLRequest requestWithURL:url]; //下载任务 NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { //打印下下载进度 WKNSLog(@"%lf",1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount); } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { //下载地址 WKNSLog(@"默认下载地址:%@",targetPath); //设置下载路径,通过沙盒获取缓存地址,最后返回NSURL对象 NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject]; return [NSURL URLWithString:filePath]; } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { //下载完成调用的方法
      WKNSLog(@"下载完成:");
      WKNSLog(@"%@--%@",response,filePath); }]; //开始启动任务
      [task resume]; }

      监测当前网络状态(网络监听)

      - (void)AFNetworkStatus{
      
          //1.创建网络监测者
      AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; /*枚举里面四个状态 分别对应 未知 无网络 数据 WiFi
      typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
      AFNetworkReachabilityStatusUnknown = -1, 未知
      AFNetworkReachabilityStatusNotReachable = 0, 无网络
      AFNetworkReachabilityStatusReachableViaWWAN = 1, 蜂窝数据网络
      AFNetworkReachabilityStatusReachableViaWiFi = 2, WiFi
      };
      */ [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
      //这里是监测到网络改变的block 可以写成switch方便
      //在里面可以随便写事件
      switch (status) {
      case AFNetworkReachabilityStatusUnknown:
      WKNSLog(@"未知网络状态");
      break;
      case AFNetworkReachabilityStatusNotReachable:
      WKNSLog(@"无网络");
      break; case AFNetworkReachabilityStatusReachableViaWWAN:
      WKNSLog(@"蜂窝数据网"); break; case AFNetworkReachabilityStatusReachableViaWiFi:
      WKNSLog(@"WiFi网络"); break; default:
      break;
      } }] ;
      }

      AFN3.0 上传

    • /**
      * AFN 3.0 上传
      * 有两种方式
      * upLoad1 和 upLoad2
      */ //第一种方法是通过工程中的文件进行上传
      - (void)upLoad1{ //1。创建管理者对象
      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //2.上传文件
      NSDictionary *dict = @{@"username":@""}; NSString *urlString = @"";
      [manager POST:urlString parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
      //上传文件参数
      UIImage *iamge = [UIImage imageNamed:@"123.png"];
      NSData *data = UIImagePNGRepresentation(iamge);
      //这个就是参数
      [formData appendPartWithFileData:data name:@"file" fileName:@"123.png" mimeType:@"image/png"]; } progress:^(NSProgress * _Nonnull uploadProgress) { //打印下上传进度
      WKNSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
      } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //请求成功
      WKNSLog(@"请求成功:%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //请求失败
      WKNSLog(@"请求失败:%@",error);
      }]; } //第二种是通过URL来获取路径,进入沙盒或者系统相册等等
      - (void)upLoda2{
      //1.创建管理者对象
      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
      //2.上传文件
      NSDictionary *dict = @{@"username":@""}; NSString *urlString = @"";
      [manager POST:urlString parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"文件地址"] name:@"file" fileName:@"1234.png" mimeType:@"application/octet-stream" error:nil];
      } progress:^(NSProgress * _Nonnull uploadProgress) { //打印下上传进度
      WKNSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
      } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //请求成功
      WKNSLog(@"请求成功:%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //请求失败
      WKNSLog(@"请求失败:%@",error);
      }];
      }

      总结的也不一定全面,还需要各位同僚共同努力,如有什么疑问,请加我扣扣:1123231279

    • 最后附上Github地址:https://github.com/wy08/RequestModel

ios 对于AFNetworking3.0的基本使用的更多相关文章

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

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

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

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

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

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

  4. AFNetworking3.0的基本使用方法

    前一段时间在做项目的时候发现AFNetworking3.0已经被大众所接受,所以以后肯定会有很多程序猿朋友必须了解和转移至3.0了,这是我这段时间使用和学习总结出来的一些常用的知识点,希望对大家有用. ...

  5. AFNetworking3.0为何弃用了NSURLConnection

    http://blog.csdn.net/qq_34101611/article/details/51698524 上篇博客说到AFNetworking3.0只提供了NSURLSession的支持.其 ...

  6. 网络婚礼之AFNetWorking3.0

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

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

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

  8. ShareSDK for iOS 2.9.0已经公布

    ShareSDK for iOS v2.9.0已经公布,本次更新内容包含: 1.修复Facebook获取用户信息报错问题 2.修复Instagram在iPad上显示分享菜单错误问题,须要指定菜单容器. ...

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

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

随机推荐

  1. 简介C#读取XML的方式(转)

    在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询. XML作用 ...

  2. Xilinx Zynq ZC-702 开发(02)—— 软件程序调试方法

    1.简介 本教程将指导您使用 SDK 调试应用程序项目,本教程中描述的调试步骤是非常基础的:有关更多信息,请参考 SDK 帮助中的调试任务. 在使用本教程之前,您应该已经创建了一个应用程序项目,并在工 ...

  3. TCPlayer web切换播放问题

    遇到播放的视频无法切换的问题,,即便是清除标签重新生成也不行~~ 需要使用自带的API ~别无他法 demo: http://imgcache.qq.com/open/qcloud/video/tcp ...

  4. Grafana短信报警实现

    1.阿里云短信服务API2.Jenkins-plugin:Generic Webhook Trigger Plugin 阿里云 下载阿里云短信服务SDK 创建短信服务ACCESS_KEY_ID Gra ...

  5. Python 学习笔记01篇

    编程基础很零碎 看了路飞学城的讲解视频,整体课程列表排列很清晰,每个视频都在十几分钟到二十几分钟之间,适合零碎化的的学习 第一章和第二章的前半部分可以较轻松地入门

  6. Adobe Flash player ActiveX下载地址

    http://www.adobe.com/support/flashplayer/downloads.html http://download.macromedia.com/pub/flashplay ...

  7. linux上部署jenkins步骤小记

    一.部署jdk环境 1.下载jdk包,解压,放在选定的位置,我本次jdk包放置在“/usr/local/java/jdk” 目录下 2.配置环境变量 1)打开/etc/profile文件,在命令框中输 ...

  8. curl -d中的json存在引号怎么处理?

    1\将其改写为I'\''m就可以执行 2\ curl -u elastic:mypass -X GET "localhost:9200/_analyze?pretty" -d 'a ...

  9. 自己电脑组一个Wifi热点

    ① 在cmd窗口 ssid 是wifi名称.key是密码 netsh wlan set hostednetwork mode=allow ssid=yb key=15564130 ② ③ 运行脚本 新 ...

  10. 在Laravel项目中遇到的一些问题

    1. 控制器名字要跟控制器类名保持一致(当保存某个版本的文件时,我通常喜欢复制一份并重命名,这时候重命名的文件的类名并没有改变,着往往回影响结果,却一直找不出错在哪里),在备份的时候应该新建一个文件夹 ...