美文网首页
iOS_网络请求_NSURLSession_使用

iOS_网络请求_NSURLSession_使用

作者: 狍子扛枪 | 来源:发表于2017-05-05 13:25 被阅读0次

    1.Tips:

    发布版本 -> iOS7
    支持HTTP 2.0
    下载时直接将下载的文件存储到沙盒内的tmp文件夹(要保存的需要自行处理)
    支持断点续传
    支持后台下载/上传
    多线程异步下载

    2.使用步骤:

    1.创建session对象

    2.通过session创建task

    3.启动task

    4.根据所设置的block(delegate)处理请求返回

    3.具体使用

    ( 1 )GET、POST请求

    通过block处理请求返回

    // 请求url
    NSURL *url = [NSURL URLWithString:@"http://www.test.com/login"];
    
    // 初始化request,在request中设置请求方式
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
    // POST请求
    request.HTTPMethod = @"POST";
    
    // GET请求
    //request.HTTPMethod = @"GET";
    
    request.HTTPBody = [@"username=Hohn&pwd=888" dataUsingEncoding:NSUTF8StringEncoding];
    
    // 创建session对象
    NSURLSession *session = [NSURLSession sharedSession];
    
    // 创建task对象,并设置对请求的返回处理block
    NSURLSessionTask *task = [session dataTaskWithRequest:request
                                        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                            //TODO 请求返回处理
                                    }];
    // 启动task
    [task resume];
    

    通过delegate处理请求返回

    // 请求url
    NSURL *url = [NSURL URLWithString:@"http://www.test.com/login"];
    
    // 初始化request,在request中设置请求方式
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
    // POST请求
    request.HTTPMethod = @"POST";
    
    // GET请求
    //request.HTTPMethod = @"GET";
    
    request.HTTPBody = [@"username=Hohn&pwd=888" dataUsingEncoding:NSUTF8StringEncoding];
    
    // 创建session对象
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
                                                          delegate:self
                                                     delegateQueue:[[NSOperationQueue alloc] init]];
    
    // 创建task对象,并设置对请求的返回处理block
    NSURLSessionTask *task = [session dataTaskWithRequest:request
                                        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                            //TODO 请求返回处理
                                    }];
    
    // 启动task
    [task resume];
    
    
    //对应的代理方法如下:
    
    // 1.接收到服务器的响应
    - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
        // 允许处理服务器的响应,才会继续接收服务器返回的数据
        completionHandler(NSURLSessionResponseAllow);
    }
    
    // 2.接收到服务器的数据(可能调用多次)
    - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
        // 处理每次接收的数据
    }
    
    // 3.请求成功或者失败(如果失败,error有值)
    - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
        // 请求完成,成功或者失败的处理
    }
    

    通过delegate去处理请求可以更方便的控制各个阶段,从而实现断点续传等更丰富的功能,各种delegate

    ( 2 )GET、POST请求

    相关文章

      网友评论

          本文标题:iOS_网络请求_NSURLSession_使用

          本文链接:https://www.haomeiwen.com/subject/goyjtxtx.html