GET/POST请求(NSURLSession)

步骤

    使用NSURLSession创建task,然后执行task

Task

    a.NSURLSessionTask是一个抽象类,本身不能使用,只能使用它的子类
    b.NSURLSessionDataTask\NSURLSessionUploadTask\NSURLSessionDownloadTask

发送get请求

    //1.创建NSURLSession对象(单例对象)
    NSURLSession *session = [NSURLSession sharedSession];
    
    //2.根据NSURLSession对象创建一个Task
    
    NSURL *url = [NSURL URLWithString:@"http://zzk.cnblogs.com/Content/so.css?id=20140908"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    
    /*
     注意:该block是在子线程中调用的,如果拿到数据之后要做UI刷新,需回到主线程刷新
     第一个参数:需要发送的请求对象
     block:当请求结束拿到服务器响应的数据时调用block
     NSData:响应体
     NSURLResponse:响应信息,响应头,真实类型为NSHTTPURLResponse
     NSErroe:错误信息
     */
    NSURLSessionDataTask * dataTask =  [session dataTaskWithRequest:request completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error) {
        
        //拿到响应头信息
        NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
        
        //4.解析拿到的响应数据
        NSLog(@"%@\n%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding],res.allHeaderFields);
    }];
    
    //3.执行Task
    //注意:创建的task默认挂起状态,需执行
    [dataTask resume];

发送get请求的第二种方式

  //注意:该方法内部默认会把URL对象包装成一个NSURLRequest对象(默认是GET请求)
- (nullable NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error))completionHandler;

发送POST请求

    //1.创建NSURLSession
    NSURLSession *session = [NSURLSession sharedSession];
    
    //2.根据NSURLSession创建Task
    NSURL *url = [NSURL URLWithString:@"http://zzk.cnblogs.com/Content/so.css"];
    
    //创建一个请求对象,设置请求方法为POST,把参数放在请求体中传递
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"POST";
    request.HTTPBody = [@"id=20140908" dataUsingEncoding:NSUTF8StringEncoding];
    
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error) {
        //获取响应头信息
        NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
        
        //解析数据
        NSLog(@"%@\n%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding],res.allHeaderFields);
    }];
    
    //3.执行Task
    [dataTask resume];
posted @ 2016-06-20 13:17  superxjhw  阅读(733)  评论(0编辑  收藏  举报