UI-Senior网络请求3--getSession / postSession

和异步的GET和POST一样 , 获取数据可以有两种方法: 代理 + block
文中的url字符串都是宏定义的对象

getSession 和postSession实现步骤的区别

屏幕快照 2016-07-04 下午9.27.21.png

1. getSession

- (void)getSession{

//第一步: 获取URL
    NSURL *url = [NSURL URLWithString:GET_URL];

//第二步:  block
/*
//第二步: 创建NSURLSession对象
    //NSURLSession: 是基于任务完成相关的事件, 所有内容都放到该任务中
    NSURLSession *session = [NSURLSession sharedSession];//使用的是系统提供的全局单例
    
//第三步: 通过url创建任务task对象
   
    //NSURLSessionTask: 就是NSURLSession任务执行对象
    NSURLSessionTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
       
        if (error == nil) {
            
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingAllowFragments) error:nil];
            NSLog(@"%@", dic);
        }
        
    }];*/

//第二步: 代理方式
//第二步: 创建NSURLSession对象
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    
//第三步: 通过url创建Task
    NSURLSessionTask *task = [session dataTaskWithURL:url];
    
    
//第四步: 执行任务
    [task resume];
}```

###2. postSession
```code
- (void)postSession{
    
//第一步: 或取URL
    NSURL *url = [NSURL URLWithString:POST_URL];
    
//第二步: 创建请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
//第三步: 设置Body
    //设置body信息
    NSString *bodyStr = POST_BODY;
    NSData *data = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:data];
    
    //设置请求方法
    [request setHTTPMethod:@"POST"];
    
    
//第四步: 创建Session对象
    NSURLSession *session = [NSURLSession sharedSession];
    
//第五步: 创建任务Task(不同与GET --> dataTaskWithRequest)
    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        
        if (error == nil) {
            
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingAllowFragments) error:nil];
            
            NSLog(@"%@", dic);
        }
    }];

//第六步: 启动请求
    [task resume];
    
}```

###NSURLSessionDataDelegate代理方法
```code
//服务器开始响应, 准备返回数据
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveResponse:(NSURLResponse *)response
 completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler{
    
    //允许服务器的响应, 才会继续接收服务器返回的数据
    completionHandler(NSURLSessionResponseAllow);
    //初始化数据源
    self.sessionData = [NSMutableData data];
    
}

//客户端接收数据
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
    didReceiveData:(NSData *)data{
    
    [self.sessionData appendData:data];
    
}

//数据接收完成, 结束响应
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{
    
    if (error == nil) {
        
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.sessionData options:(NSJSONReadingAllowFragments) error:nil];
        
        NSLog(@"%@", dic);
    }
    
}```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • AFHTTPRequestOperationManager 网络传输协议UDP、TCP、Http、Socket、X...
    Carden阅读 4,394评论 0 12
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,252评论 1 23
  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 3,479评论 2 4
  • 不管你信不信, WebVR绝对是浏览器下一个让你激动的技术方向, 也许很快你就可以使用VR头显或者相关设备直接访问...
    小小孩儿的碎碎念阅读 413评论 0 3