您的位置:首页 > 理论基础 > 计算机网络

网络篇 - 06.NSURLSession基本使用

2015-08-27 21:49 501 查看

1.概述

此前提到过,NSURLSession是目前苹果主要推荐使用的网络请求操作类

使用步骤如下

创建NSURLSession对象

使用NSURLSession对象创建task对象

执行task

Task类型



2.发送GET请求

方法一,根据请求对象创建任务后发送请求

-(void)get{
// 根据URL创建请求对象
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 创建NSURLSession对象
NSURLSession *session = [NSURLSession sharedSession];
// 根据NSURLSession创建task
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
/*
data: 服务器返回给我们的数据
response : 响应头
error: 错误信息
*/
NSLog(@"%@",[NSThread currentThread]);// 输出结果:<NSThread: 0x7f86fbd954b0>{number = 3, name = (null)}
NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}];
// 执行task
[task resume];
NSLog(@"%@",[NSThread currentThread]);// <NSThread: 0x7f86fbc0b060>{number = 1, name = main}
}


查看输出结果可知:

<NSThread: 0x7f86fbc0b060>{number = 1, name = main}
<NSThread: 0x7f86fbd954b0>{number = 3, name = (null)}
{"success":"登录成功"}


在我们执行task后,NSURLSessionDataTask对象会发送异步请求,且同时会开辟子线程给完成请求后的回调block

方法二,根据URL创建Task

如果是通过传入url的方法创建Task, 方法内部会自动根据URL创建一个Request

如果是发送Get请求, 或者不需要设置请求头信息, 那么建议使用当前方法发送请求

-(void)get2{
// 根据URL创建请求对象
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"];
// 创建NSURLSession对象
NSURLSession *session = [NSURLSession sharedSession];
// 根据url创建task
NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
/*
data: 服务器返回给我们的数据
response : 响应头
error: 错误信息
*/
NSLog(@"%@",[NSThread currentThread]);
NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}];
// 执行task
[task resume];
NSLog(@"%@",[NSThread currentThread]);
}


查看输出结果可知:和方法一样,发送异步请求,并且创建子线程

<NSThread: 0x7f86fbc0b060>{number = 1, name = main}
<NSThread: 0x7f86fbd954b0>{number = 3, name = (null)}
{"success":"登录成功"}


3.发送POST请求

注意发送POST请求,必须使用dataTaskWithRequest:completionHandler:方法创建task,不然无法发送POST请求

-(void)post{
// 根据URL创建请求对象
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
request.HTTPBody = [@"username=520it&pwd=520it&type=JSON" dataUsingEncoding:NSUTF8StringEncoding];
// 创建NSURLSession对象
NSURLSession *session = [NSURLSession sharedSession];
// 根据NSURLSession创建task
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
/*
data: 服务器返回给我们的数据
response : 响应头
error: 错误信息
*/
NSLog(@"%@",[NSThread currentThread]);
NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}];
// 执行task
[task resume];
NSLog(@"%@",[NSThread currentThread]);
}


4.利用NSURLSession下载文件

下载文件需要使用NSURLSessionDownloadTask

NSURLSessionDownloadTask已经默认帮我们实现了, 边下载边写入到沙盒temp文件下

-(void)download{
// 根据URL创建请求对象
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_02.png"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 创建NSURLSession对象
NSURLSession *session = [NSURLSession sharedSession];
// 根据NSURLSession创建NSURLSessionDownloadTask
NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
// location: 下载好的文件在沙盒中的位置
NSLog(@"%@", location);
// 拼接caches文件路径
NSString *toPath = [response.suggestedFilename cacheDir];
NSURL *url = [NSURL fileURLWithPath:toPath];
// 将temp文件中的内容剪切到caches中
NSFileManager *manager = [NSFileManager defaultManager];
[manager moveItemAtURL:location toURL:url error:nil];
}];
[task resume];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: