NSURLSession的使用

 /*先说一下NSURLSession的用法:
                                1, NSURLSession 创建 NSURLSessionTask 任务
                                2, task任务创建完成之后,执行就OK啦
    */
    
    

    
    /*
     NSURLSessionConfiguration 设置session的一些配置  例如访问性能,到cookie,安全性,缓存策略,自定义协议,启动事件设置,以及用于移动设备优化的几个新属性
     */
    NSURLSessionConfiguration * Configuration;

//独特之处在于,它会创建一个后台会话。后台会话不同于常规的,普通的会话,它甚至可以在应用程序挂起,退出,崩溃的情况下运行上传和下载任务。初始化时指定的标识符,被用于向任何可能在进程外恢复后台传输的守护进程提供上下文。
//    Configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"123"];
    
    //标配,这个跟[NSURLSession sharedSession];的时候是一样的
    Configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    
    
    //没有持久性存储的缓存,Cookie或证书。无痕浏览,你懂得、、、
//    Configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration];

#pragma mark - NSURLSessionConfiguration 的一些属性
    //  HTTPAdditionalHeaders 请求头
//大部分的时候不用设置,好像都是默认的
 //    Configuration.HTTPAdditionalHeaders = @{@"Accept": @"application/json;charset=utf-8",//设置内容类型
//                                            @"Accept-Language": @"en",//语言
//                                            @"Authorization": @"authString",//身份验证信息
//                                            @"User-Agent": @"userAgentString"};//客户端类型
    
    
    /*
     networkServiceType
     
     NSURLNetworkServiceTypeDefault = 0,	// Standard internet traffic
     NSURLNetworkServiceTypeVoIP = 1,	// Voice over IP control traffic
     NSURLNetworkServiceTypeVideo = 2,	// Video traffic
     NSURLNetworkServiceTypeBackground = 3, // Background traffic
     NSURLNetworkServiceTypeVoice = 4,	   // Voice data
     NSURLNetworkServiceTypeCallSignaling API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) = 11, // Call Signaling
     这个我也没发现有什么用,也不会用。。。。
     */
    Configuration.networkServiceType = NSURLNetworkServiceTypeDefault;
    
    /*
     设置该session发生的请求允许使用蜂窝流量
     */
    Configuration.allowsCellularAccess = YES;
    
    /*
     
     "timeoutIntervalForRequest"和"timeoutIntervalForResource"请求的时间限制和获得资源的时间限制。
     许多开发人员试图使用timeoutInterval去限制发送请求的总时间,但这误会了timeoutInterval的意思:同一个请求中获取第一个资源和第二个资源的时间间隔。
     */
    Configuration.timeoutIntervalForRequest = 2;
    Configuration.timeoutIntervalForResource = 5;
    
    /*
     HTTPMaximumConnectionsPerHost  同时持续连接的每个主机的最大数量
     
     */
    Configuration.HTTPMaximumConnectionsPerHost = 5;
    
    
    /*
     是否允许使用Http通道:可以降低请求的时间,但是需要服务器支持
     
     */
    Configuration.HTTPShouldUsePipelining = YES;
    
    
    //这个必须设置后台【+backgroundSessionConfigurationWithIdentifier:】的时候,设置他才有用,他设置为YES的时候支持从后台启动
    Configuration.sessionSendsLaunchEvents = YES;
    
    //是否会使用cookie
    Configuration.HTTPShouldSetCookies = YES;
    
    //决定了该会话应该接受从服务器发出的cookie的条件
    Configuration.HTTPCookieAcceptPolicy = YES;
    
#pragma Mark - Session的创建
    NSURLSession * session;
大部分的时候我们不需要设置 Configuration

 //这家伙是个单例
//    session = [NSURLSession sharedSession];

    //这个是默认创建一个OperationQueue处理session的消息
//    session = [NSURLSession sessionWithConfiguration:Configuration];
    
    /*
     可以设定回调的delegate(注意这个回调delegate会被强引用),并且可以设定delegate在哪个OperationQueue回调,如果我们将其设置为[NSOperationQueue mainQueue]就能在主线程进行回调非常的方便。
     */
    __weak typeof(self) weakSelf = self;
    session = [NSURLSession sessionWithConfiguration:Configuration delegate:weakSelf delegateQueue:[NSOperationQueue mainQueue]];

    NSURL * url = [NSURL URLWithString:@"http://www.tngou.net/api/drug/classify"];
    NSURLRequest * request = [NSURLRequest requestWithURL:url];

#pragma mark - task的创建
    
    /*
     NSURLSessionTask : 的三个(孙)子类
     NSURLSessionDataTask : 网络请求数据的任务
     NSURLSessionUploadTask : 上传数据的任务 (NSURLSessionDataTask 的子类, NSURLSessionTask的孙子类)
     NSURLSessionDownloadTask : 下载数据的任务
     */
    
    NSURLSessionTask * task;
//    request.timeoutInterval
//    dataTaskWithURL   是指包含url的数据任务。
//    dataTaskWithRequest   是指包含需要的数据任务。
    
//    task = [session dataTaskWithURL:url];
//    task = [session dataTaskWithRequest:request];
//    task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//        id js = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
//        NSLog(@"%@",js);
//    }];
    task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        id js = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        MMLog(@"%@",response);
        MMLog(@"%@",js);
    }];
    [task resume];
    
    //上传的任务
    NSURLSessionUploadTask * uploadTask = [session uploadTaskWithRequest:request fromFile:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        
        NSLog(@"login : %@",response);
        NSDictionary * dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"login : %@",[dict objectForKey:@"message"]);
        
    }];
    [uploadTask resume];
    
    
    //下载的任务
    NSURLSessionDownloadTask * downLoadTask = [session downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSFileManager * manager = [NSFileManager defaultManager];
        [manager createFileAtPath:[NSString stringWithFormat:@"%@/Documents/1.zip",NSHomeDirectory()] contents:[NSData dataWithContentsOfURL:location] attributes:nil];
        NSLog(@"%@",NSHomeDirectory());
    }];
    [downLoadTask resume];
    //其中上传的和下载的任务都可以实现断点续传。。。但是我公司不用 ,所以以后有机会再深究
    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值