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. 很不幸,装win10和Ubuntu双系统还是入坑了

    具体问题描述:在安装Ubuntu的时候,没有发现有与windows共存的提示,直接说本计算机没有安装系统.在安装完成后,发现通过BIOS只有进入Ubuntu的启动项,没有进入Windows的启动项. ...

  2. pyqt-QGrapicsView类

    QGrapicsView类 QGraphicsView提供一个显示QGraphicsScene内容的窗口,该窗口可以滚动,可以在构造时候把场景对象作为参数,或者之后使用setScene()来设置vie ...

  3. Unresolved externa Round

    [ilink32 Error] Error: Unresolved external '__stdcall Round(const double, int)' referenced from e:\工 ...

  4. jsp页面选择文件上传,获取不到绝对路径问题

    选择"D:\\temp\file\test.txt"文件,alert(filename)却是"C:\\fakepath\test.txt" 出现D:\\temp ...

  5. Java JDK动态代理解析

    动态代理虽不常自己实现,但在Spring或MyBatis中都有重要应用.动态代理的意义在于生成一个占位(又称代理对象),来代理真实对象,从而控制真实对象的访问.Spring常JDK和CGLIB动态代理 ...

  6. Spark环境搭建

    转载:https://blog.csdn.net/songhaifengshuaige/article/details/79480491

  7. 问题:页面输出正常,php写入sqlserver乱码/空白。

    问题一:php连接sqlsever2005,输入中文,然后查询sqlserver中对应的数据,由于提交中文是UTF-8,而sqlserver的中文为GBK,所以字段无法匹配,没有查询结果. 问题二,p ...

  8. Linux Simple Systemd Service Guide

    Simple Systemd Service Guide 主题 Systemd介绍 Systemd基本操作 怎样编写_service_.service文件 怎样部署service Systemd介绍 ...

  9. NABCD-课程表开发

    N:需求 1.学生录入课程需求. 2.学生对于空教室使用需求(自习或活动占用). 3.学生对于具体课程的查询需求. A:做法 基于安卓课程查询,录入系统. B:好处 1.满足课程表的基本需求 2.便于 ...

  10. C语言典型编程3

    关于C的一些小而精的编程,适合希望提升编程能力的初学者学习:关键编程也就几句,但思维可以迁移到其他编程语言.同一问题,算法多种. //判断三角形类型#include<stdio.h>mai ...