IOS网络请求之NSURLSession使用详解

2020-01-18 20:51:03王旭

3.)创建NSURLSession会话对象

可以通过采用iOS共享Session的方式


  // 采用苹果提供的共享session
  NSURLSession *sharedSession = [NSURLSession sharedSession];

可以通过NSURLSessionConfiguration方式配置不同的NSURLSession


  // 构造NSURLSessionConfiguration
  NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
  // 构造NSURLSession,网络会话;
  NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];

通过NSURLSessionConfiguration提供了三种创建NSURLSession的方式

defaultSessionConfiguration //默认配置使用的是持久化的硬盘缓存,存储证书到用户钥匙链。存储cookie到shareCookie。 ephemeralSessionConfiguration //不使用永久持存cookie、证书、缓存的配置,最佳优化数据传输。 backgroundSessionConfigurationWithIdentifier //可以上传下载HTTP和HTTPS的后台任务(程序在后台运行)。

在后台时,将网络传输交给系统的单独的一个进程,即使app挂起、推出甚至崩溃照样在后台执行。

也可以通过NSURLSessionConfiguration统一设置超时时间、请求头等信息


  // 构造NSURLSessionConfiguration
  NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
  //设置请求超时为10秒钟
  configuration.timeoutIntervalForRequest = 10;
  
  //在蜂窝网络情况下是否继续请求(上传或下载)
  configuration.allowsCellularAccess = NO;

  //配置请求头
  configuration.HTTPAdditionalHeaders =@{@"Content-Encoding":@"gzip"};

4.) 创建NSURLSessionTask对象,然后执行


  // 构造NSURLSessionTask,会话任务;
  NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    // 请求失败,打印错误信息
    if (error) {
      NSLog(@"get error :%@",error.localizedDescription);
    }
    //请求成功,解析数据
    else {
      // JSON数据格式解析
      id object = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error];
      // 判断是否解析成功
      if (error) {
        NSLog(@"get error :%@",error.localizedDescription);
      }else {
        NSLog(@"get success :%@",object);
        // 解析成功,处理数据,通过GCD获取主队列,在主线程中刷新界面。
        dispatch_async(dispatch_get_main_queue(), ^{
          // 刷新界面....
        });
      }
    }
  }];

iOS为了适应不同的应用场景提供了不同类型的NSSessionTask

NSURLSessionDataTask  //一般的get、post等请求 NSURLSessionUploadTask // 用于上传文件或者数据量比较大的请求 NSURLSessionDownloadTask //用于下载文件或者数据量比较大的请求 NSURLSessionStreamTask //建立一个TCP / IP连接的主机名和端口或一个网络服务对象。