NSUrlSession简单使用

NSURLSessionTask是一个抽象子类,它有三个具体的子类是可以直接使用的:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。 

NSURLSessionDataTask

///发送get 请求,用于登录和请求数据/    

//创建session对象
    NSURLSession *session = [NSURLSession sharedSession];
    
    //创建URL请求
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:login]];
    
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
                
        NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
        
    } ];
    
    //开始执行
    [task resume];

 

//发送post 请求//    

NSURLSession *session = [NSURLSession sharedSession];
    
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:login1]];
    
    request.HTTPMethod = @"POST";
    request.HTTPBody = [@"username=1231&pwd=123" dataUsingEncoding:NSUTF8StringEncoding];
    
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
       
        NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
        
    }];
    
    [task resume];

 

使用代理方法请求数据///
//需要实现 NSURLSessionDataDelegate 协议

-(void)delegate
{
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
    
    NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:vide0]]];
    
    [task resume];
}

//接收到数据调用
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
    [self.totalData appendData:data];
    NSLog(@"%zd", self.totalData.length);
}

//接收到服务器响应时调用
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
    //允许数据传输,必须设置
    completionHandler(NSURLSessionResponseAllow);
}


-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
    //下载完成调用
    NSLog(@"%@", error.description);
}

NSURLSessionDownloadTask 下载文件

-(void)downLoad
{
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
    
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:image]];
    
    NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request];
    
    [task resume];
}

//下载完成调用
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
{
    //文件临时缓存地址,下载完成后需要将文件移动到其他地址
    NSLog(@"%@", location);
    
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    
    NSString *temp = [path stringByAppendingPathComponent:downloadTask.response.suggestedFilename];
    
    //创建文件URL地址
    NSURL *url = [NSURL fileURLWithPath:temp];
    
    NSLog(@"%@", temp);
    
    //移动文件
    [[NSFileManager defaultManager] moveItemAtURL:location toURL:url error:nil];
    
}

//接收到文件数据时调用,
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
      didWriteData:(int64_t)bytesWritten
 totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
    
    NSLog(@"%zd", bytesWritten);
    NSLog(@"%zd", totalBytesWritten);

}

//下载完成调用
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
    NSLog(@"didComplete");
}

 NSURLSessionDownloadTask 断点下载文件


-(NSURLSessionDownloadTask *)task
{
    if(_task == nil){
        
        self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
        
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:vide0]];
        
        _task = [self.session downloadTaskWithRequest:request];
        
    }
    
    return _task;
}



//开始、继续下载
- (IBAction)start:(id)sender {
    
    //从上次取消或者下载失败的数据继续下载
    self.task = [self.session downloadTaskWithResumeData:self.data];
    
    [self.task resume];
}

//暂停
- (IBAction)pause:(id)sender {
    
//    [self.task suspend];
    
    //取消下载并保存之前下载的数据,继续下载时可以使用保存的数据
    [self.task cancelByProducingResumeData:^(NSData * _Nullable resumeData) {
        
        self.data = resumeData;
        
    }];
}


//停止
- (IBAction)stop:(id)sender {
    
    [self.task cancel];
    
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        
        [self.progressView setProgress:0];
        self.data = nil;
    }];
}


- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
{
    NSLog(@"%@", location);
    
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    
    NSString *temp = [path stringByAppendingPathComponent:downloadTask.response.suggestedFilename];
    
    NSURL *url = [NSURL fileURLWithPath:temp];
    
    NSLog(@"%@", temp);
    
    [[NSFileManager defaultManager] moveItemAtURL:location toURL:url error:nil];
    
}

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
      didWriteData:(int64_t)bytesWritten
 totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        CGFloat progress = 1.0 * totalBytesWritten / totalBytesExpectedToWrite ;
        NSLog(@"%zd %zd %lf",bytesWritten, totalBytesExpectedToWrite, progress);
        [self.progressView setProgress:progress];
    }];

}

-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
    NSLog(@"didComplete");
}

 

转载于:https://my.oschina.net/mexiaobai1315/blog/749678

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值