NSURLSession使用

本文详细介绍了使用NSURLSession进行网络请求的方法,包括GET和POST请求的实现,文件的上传与下载,以及离线断点续传功能。通过具体的代码示例,展示了如何创建NSURLSession对象,配置请求,处理响应数据,以及在iOS开发中常见的网络请求场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 get请求

 //1.创建NSURLSession对象(可以获取单例对象)
    NSURLSession *session = [NSURLSession sharedSession];
    //2.根据NSURLSession对象创建一个Task
    NSURL *url = [NSURL URLWithString:@"url"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //方法参数说明
    /*
     注意:该block是在子线程中调用的,如果拿到数据之后要做一些UI刷新操作,那么需要回到主线程刷新
     第一个参数:需要发送的请求对象
     block:当请求结束拿到服务器响应的数据时调用block
     block-NSData:该请求的响应体
     block-NSURLResponse:存放本次请求的响应信息,响应头,真实类型为NSHTTPURLResponse
     block-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];

2 、post 请求

 //1.创建NSURLSession对象(可以获取单例对象)
    NSURLSession *session = [NSURLSession sharedSession];
    //2.根据NSURLSession对象创建一个Task
    NSURL *url = [NSURL URLWithString:@"url"];
    //创建一个请求对象,并这是请求方法为POST,把参数放在请求体中传递
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"POST";
    request.HTTPBody = [@"deviceType=IOS" 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
    //注意:刚创建出来的task默认是挂起状态的,需要调用该方法来启动任务(执行任务)
    [dataTask resume];

3、文件下载

NSURL *url = [NSURL URLWithString:downUrl];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //默认存储到临时文件夹中,需要将文件移动到其它位置
        NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];
        [[NSFileManager defaultManager] moveItemAtURL:location toURL:[NSURL fileURLWithPath:path] error:nil];
        NSLog(@"---location - %@  res - %@",location,response);
    }];
    [downloadTask resume];

4、上传文件

 NSURL *url = [NSURL URLWithString:@"上传地址"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"POST";
    UIImage *image = [UIImage imageNamed:@"name.png"];
    NSData *data = UIImagePNGRepresentation(image);
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionUploadTask *dataTask = [session uploadTaskWithRequest:request fromData:data completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    }];
    [dataTask resume];

5、离线断点下载

- (void)bDownBtnClick {
//关于网络请求请求头的设置(可以设置请求下载文件的某一部分)
    //1. 设置请求对象
    //1.1 创建请求路径
    NSURL *url = [NSURL URLWithString:downUrl];
    //1.2 创建可变请求对象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //1.3 拿到当前文件的残留数据大小
    NSInteger  currentContentLength = [self fileSize];
    //1.4 告诉服务器从哪个地方开始下载文件数据
    NSString *range = [NSString stringWithFormat:@"bytes=%zd-",currentContentLength];
    NSLog(@"%@",range);
    //1.5 设置请求头
    [request setValue:range forHTTPHeaderField:@"Range"];
    NSURLSession *session = [NSURLSession sharedSession];

    NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //默认存储到临时文件夹中,需要将文件移动到其它位置
        NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];
        [[NSFileManager defaultManager] moveItemAtURL:location toURL:[NSURL fileURLWithPath:path] error:nil];
        NSLog(@"---location - %@  res - %@",location,response);
    }];
    [downloadTask resume];
}

- (NSInteger)fileSize {
    //通过路径去到对应的数据
    //然后算出大小
    return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值