• 网络篇-NSURLSession介绍


    NSURLSession:

    作用:
        和NSURLConnection一样
        1、负责发送请求,建立客户端和服务器的连接发送数据给服务器
        2、并收集来自服务器的响应数据
    步骤:
        1、创建NSURLSession对象
        2、利用NSURLSession创建任务(task)
        3、执行任务
    任务的类型:
        1、NSURLSessionDataTask         //普通的请求数据
        2、NSURLSessionDownloadTask     //下载数据
        3、NSURLSessionUploadTask       //上传数据
    
    • NSURLSessionDataTask(普通的请求数据)

      • GET 请求
      - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
          //1、创建NSURLSession对象
          NSURLSession *session = [NSURLSession sharedSession];
          //2、利用NSURLSession创建任务(task)
          NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login?username=LitterL&pwd=123"];
          NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
              NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
          }];
          //3、执行任务
          [task resume];
      }
      
      • POST 请求
      - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
          //1、创建NSURLSession对象
          NSURLSession *session = [NSURLSession sharedSession];
          //2、利用NSURLSession创建任务(task)
          NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login"];
          //创建请求对象里面包含请求体
          NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
          request.HTTPMethod = @"POST";
          request.HTTPBody = [@"username=LitterL&pwd=123" dataUsingEncoding:NSUTF8StringEncoding];
          NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
              NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
          }];
          //3、执行任务
          [task resume];
      }
      
      • 补充

        这里的话,结果我就不截图显示了,结果都是为一样的JSON数据

    • NSURLSessionDownloadTask:(下载图片)

      • 代码
      -(void)download{
          //创建URL
          NSURL *url = [NSURL URLWithString:@"http://upload.jianshu.io/users/upload_avatars/1232706/aa229f6d7f4d.png?imageMogr/thumbnail/90x90/quality/100"];
          //    1、创建NSURLSession对象
          NSURLSession *seesion = [NSURLSession sharedSession];
          /*    2、利用NSURLSession创建任务(task)
                  第一个参数:需要下载的文件路径
                  第二个参数:
                      location:下载好的临时文件路径
                      response:响应头
                      error:请求是否错误
          */
          NSURLSessionDownloadTask *task = [seesion downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
              //1、生成的Cace地址
              NSString *cacepath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:[NSString stringWithFormat:@"/%@",response.suggestedFilename]];
              //2、移动图片的存储地址
              NSFileManager *manager = [NSFileManager defaultManager];
              [manager moveItemAtURL:location toURL:[NSURL fileURLWithPath:cacepath] error:nil];
      
          }];
          //    3、执行任务
          [task resume];
      }
      
      • 补充

        这里是从网络上面获取图片,方法本身是帮你写到了沙盒中的tmp文件夹中去,因为tmp是临时文件夹,处于不安全的,所以这里就把写入的图片移动到沙盒的Caches中去了,但是它的缺点为不能获取下载的进度,不能让界面实时更新,在后面的文章中,我会以Demo的形式展现出来。

    • NSURLSessionUploadTask

      这里的话上传和进度下载会在后面抽取两篇文章出来,这里就不简约展示了

                     本章到此结束
               欢迎各位码友随意转载并指正
  • 相关阅读:
    .NET之API版本控制
    接口管理平台YApi
    .NET之WebAPI
    Hyperv安装Centos7
    nginx添加https模块
    基于centos8镜像,打包php的docker镜像
    jmeter生成HTML性能测试报告(转载)
    jmeter相关(转载)
    接口测试总结(转载)
    【解决了一个小问题】alert manager中的cluster.advertiseaddress参数是什么意思?
  • 原文地址:https://www.cnblogs.com/ljy-666/p/5142835.html
Copyright © 2020-2023  润新知