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请求步骤的主要内容,如果未能解决你的问题,请参考以下文章
iOS9 - NSURLSession 无法解析响应但 AlamoFire 工作
iOS开发网络篇—发送GET和POST请求(使用NSURLSession)