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. spring加载配置新旧方式对比

    老方式 1.首先要配置配置文件,如beans.xml,内容如下: <?xml version="1.0" encoding="UTF-8"?> &l ...

  2. Jquery 字符串转数字

    其实在jquery里把字符串转换为数字,用的还是js,因为jquery本身就是用js封装编写的. 比如我们在用jquery里的ajax来更新文章的阅读次数或人气的时候,就需要用到字符串转换为数字的功能 ...

  3. Tensorflow图像处理以及数据读取

    关于tensoflow的图像的处理,看到了一篇文章,个人觉得不错.https://blog.csdn.net/weiwei9363/article/details/79917942

  4. java.lang.RuntimeException: Class "org.apache.maven.cli.MavenCli$CliRequest" not found

    IDEA版本:14.1 maven版本:apache-maven-3.3.9-bin IDEA的maven项目,在pom文件执行Maven--Reimport,引入jar包依赖,报错java.lang ...

  5. 云笔记项目- 上传文件报错"java.lang.IllegalStateException: File has been moved - cannot be read again"

    在做文件上传时,当写入上传的文件到文件时,会报错“java.lang.IllegalStateException: File has been moved - cannot be read again ...

  6. ucos中信号量 事件标志 消息队列都怎么用

    信号量 事件标志和消息队列分别应用于什么场景(反正我学的时候有点闹不清,现在总结一下): 信号量和事件标志用于任务同步.详细来说,这个功能可以替代以前裸机中你打一个标记的功能,比如使用了一个定时器,5 ...

  7. Spring:AOP

    摘要 本文内容为我在网上搜集Spring AOP资料的汇总.摘抄. AOP是一种编程思想,其对不同对象进行了横向的抽象,将不同对象的.和主流程无关的公共逻辑抽象出来以方便维护.AOP的实现基础为AOP ...

  8. rancher2.1.7 +jenkins +harbor 自动容器CI系统(通过rancher命令行)

    jenkins脚本执行示例: //环境定义与 cd $WORKSPACEmodule=news-usercd $module/case $deploy in deploy) //发布模块 //编译/o ...

  9. 第二周博客作业 <西北师范大学| 周安伟>

    一,本周助教小结 逐步开始适应助教工作,对学生发布的博客进行点评,查看学生对软件工程前期的准备情况. 二,助教本人博客 https://home.cnblogs.com/u/zaw-315/ 三,学生 ...

  10. Django之ORM操作

    Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...