NSURLSession数据解析的get请求和post请求步骤

Posted 雷坤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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];
    
}

以上是关于NSURLSession数据解析的get请求和post请求步骤的主要内容,如果未能解决你的问题,请参考以下文章

iOS网络请求基础

iOS9 - NSURLSession 无法解析响应但 AlamoFire 工作

iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

NSURLSession的GET和POST请求的封装

iOS开发网络篇—发送GET和POST请求(使用NSURLSession)