IOS网络请求之AFNetWorking 3.x 使用详情

2020-01-18 20:28:11王旭

前言:

计划把公司的网络请求与业务解耦,所以想着学习一下网络请求,最近学习了NSURLSession,今天来学习一下基于NSURLSession封装的优秀开源框架AFNetWorking 3.x,之前13年做iOS开发时用的ASIHttpRequest开源框架。

AFNetWorking

AFNetWorking一款轻量级网络请求开源框架,基于iOS和mac os 网络进行扩展的高性能框架,大大降低了iOS开发工程师处理网络请求的难度,让iOS开发变成一件愉快的事情。

下载地址:AFNetworking.rar

1.)AFHTTPSessionManager请求管理者


-(AFHTTPSessionManager *)sharedManager
{
  AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  //最大请求并发任务数
  manager.operationQueue.maxConcurrentOperationCount = 5;

  // 请求格式
  // AFHTTPRequestSerializer      二进制格式
  // AFJSONRequestSerializer      JSON
  // AFPropertyListRequestSerializer  PList(是一种特殊的XML,解析起来相对容易)
  
  manager.requestSerializer = [AFHTTPRequestSerializer serializer]; // 上传普通格式
  
  // 超时时间
  manager.requestSerializer.timeoutInterval = 30.0f;
  // 设置请求头
  [manager.requestSerializer setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"];
  // 设置接收的Content-Type
  manager.responseSerializer.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml",@"text/html", @"application/json",@"text/plain",nil];
  
  // 返回格式
  // AFHTTPResponseSerializer      二进制格式
  // AFJSONResponseSerializer      JSON
  // AFXMLParserResponseSerializer   XML,只能返回XMLParser,还需要自己通过代理方法解析
  // AFXMLDocumentResponseSerializer (Mac OS X)
  // AFPropertyListResponseSerializer  PList
  // AFImageResponseSerializer     Image
  // AFCompoundResponseSerializer    组合
  
  manager.responseSerializer = [AFJSONResponseSerializer serializer];//返回格式 JSON
  //设置返回C的ontent-type
  manager.responseSerializer.acceptableContentTypes=[[NSSet alloc] initWithObjects:@"application/xml", @"text/xml",@"text/html", @"application/json",@"text/plain",nil];

  return manager;
}

2.)处理get请求


-(void)doGetRequest
{
  //创建请求地址
  NSString *url=@"http://www.easck.com/method";
  //构造参数
  NSDictionary *parameters=@{@"name":@"yanzhenjie",@"pwd":@"123"};
  //AFN管理者调用get请求方法
  [[self shareAFNManager] GET:url parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
    //返回请求返回进度
    NSLog(@"downloadProgress-->%@",downloadProgress);
  } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
    //请求成功返回数据 根据responseSerializer 返回不同的数据格式
    NSLog(@"responseObject-->%@",responseObject);
  } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    //请求失败
    NSLog(@"error-->%@",error);
  }];
}