zoukankan      html  css  js  c++  java
  • NSURLSession数据解析的get请求和post请求步骤

    #pragma mark - get请求
    - (IBAction)getRequest:(id)sender {
        
        // 方式一: 使用Block实现
        
    //    // 1.创建URL
    //    NSURL *url = [NSURL URLWithString:GET_URL];
    //    
    //    // 2.创建Session对象
    //    NSURLSession *session = [NSURLSession sharedSession];
    //    
    //    // 3.创建task请求任务
    //    // NSURLSession是基于任务去完成相关的事件
    //    // NSURLSessionTask所有的任务均放在这个里边实现
    //    NSURLSessionTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    //        
    //        // 4.解析相关的数据
    //        if (error == nil) {
    //            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    //            
    //            NSLog(@"dict = %@", dict);
    //        }
    //
    //    }];
    //    
    //    // 5.核心步骤:启动任务[千万不能忘记]
    //    // 原因:NSURLSessionTask实例出来的任务处于挂起状态,如果不启动,不会走block中实现内容
    //    [task resume];

        
        // 方法二: 使用代理实现

    // 1.创建URL    NSURL *url = [NSURL URLWithString:GET_URL];
        
        // 2.创建session
        // 参数1: 模式的设置

        /**
         默认会话模式
         defaultSessionConfiguration
         //临时会话模式
         ephemeralSessionConfiguration
         // 后台会话模式
         backgroundSessionConfigurationWithIdentifier
         
         */
        // 参数2:代理
        //参数3: 主线程队列
        
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
        
        // 3.创建pask
        NSURLSessionDataTask *task = [session dataTaskWithURL:url];
        
        // 4.启动任务
        [task resume];
        // 对数据进行加载: 使用NSURLSessionDataTask和NSURLSessionTask两者没有本质区别
        // 要处理下载任务的使用此任务:NSURLSessionDownloadTask
        
        // 要处理上传任务使用: NSURLSessionUploadTask
        
    }


    #pragma mark - NSURLSessionDataDelegate协议的实现方法

    // 服务器开始响应
    - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
    {
        //允许服务器响应[在这个地方只有允许服务器响应了才会接受到数据]
        completionHandler(NSURLSessionResponseAllow);
        
        // 初始胡data,稍后进行片段的拼接存储
        self.resultData = [NSMutableData data];

        
    }

    // 接受数据拼接
    - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
    {
        // 反复执行,然后拼接先关的片段
        [self.resultData appendData:data];
        
        
    }

    // 数据接受完成, 网络请求结束
    - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
    {
        // 解析
        
        if (error == nil) {
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
            
            NSLog(@"dict = %@", dict);
        }
        
    }



    #pragma mark - post请求
    - (IBAction)postRequest:(id)sender {
        
        //1.创建URL
        NSURL *url = [NSURL URLWithString:POST_URL];
        
        //2.创建请求
        NSMutableURLRequest *mutableRequest = [NSMutableURLRequest requestWithURL:url];
        //2.5 核心设置boby
        NSString *bobyString = POST_BODY;
        
        NSData *postData = [bobyString dataUsingEncoding:NSUTF8StringEncoding];
        [mutableRequest setHTTPMethod:@"POST"];
        [mutableRequest setHTTPBody:postData];
        
        // 3.创建Session对象
        NSURLSession *session = [NSURLSession sharedSession];
        
        // 4.创建task
        NSURLSessionTask *task = [session dataTaskWithRequest:mutableRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
           //5.解析
            if (error == nil) {
                NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
                NSLog(@"dict = %@", dict);
            }
            
        }];
        
        //6.启动任务
        [task resume];
        
    }

  • 相关阅读:
    Delphi 控件使用谷歌浏览器控件chromium 安装包是 dcef3-20140522 --碰到的问题
    salesforce零基础学习(九十九)Git 在salesforce项目中的应用(vs code篇)
    Salesforce LWC学习(二十) CLI篇:新版本不支持Audience解决方案
    Salesforce LWC学习(十九) 针对 lightning-input-field的label值重写
    apt安装后需要移除的问题
    mysql 触发器阻止不合理数据插入
    本机环境virtualbox出现问题重装
    php 版本升级后需要对代码进行兼容性检测
    k8s使用需认证的私服仓库
    无法启动electron,提示node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.
  • 原文地址:https://www.cnblogs.com/leikun1113/p/5521900.html
Copyright © 2011-2022 走看看