NSURLSession:
作用:
和NSURLConnection一样
1、负责发送请求,建立客户端和服务器的连接发送数据给服务器
2、并收集来自服务器的响应数据
步骤:
1、创建NSURLSession对象
2、利用NSURLSession创建任务(task)
3、执行任务
任务的类型:
1、NSURLSessionDataTask //普通的请求数据
2、NSURLSessionDownloadTask //下载数据
3、NSURLSessionUploadTask //上传数据
-
NSURLSessionDataTask(普通的请求数据)
-
GET 请求
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//1、创建NSURLSession对象
NSURLSession *session = [NSURLSession sharedSession];
//2、利用NSURLSession创建任务(task)
NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login?username=LitterL&pwd=123"];
NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
}];
//3、执行任务
[task resume];
} -
POST 请求
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//1、创建NSURLSession对象
NSURLSession *session = [NSURLSession sharedSession];
//2、利用NSURLSession创建任务(task)
NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login"];
//创建请求对象里面包含请求体
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
request.HTTPBody = [@"username=LitterL&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]);
}];
//3、执行任务
[task resume];
} -
补充
这里的话,结果我就不截图显示了,结果都是为一样的JSON数据
-
-
NSURLSessionDownloadTask:(下载图片)
-
代码
-(void)download{
//创建URL
NSURL *url = [NSURL URLWithString:@"http://upload.jianshu.io/users/upload_avatars/1232706/aa229f6d7f4d.png?imageMogr/thumbnail/90x90/quality/100"];
// 1、创建NSURLSession对象
NSURLSession *seesion = [NSURLSession sharedSession];
/* 2、利用NSURLSession创建任务(task)
第一个参数:需要下载的文件路径
第二个参数:
location:下载好的临时文件路径
response:响应头
error:请求是否错误
*/
NSURLSessionDownloadTask *task = [seesion downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//1、生成的Cace地址
NSString *cacepath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:response.suggestedFilename];
//2、移动图片的存储地址
NSFileManager *manager = [NSFileManager defaultManager];
[manager moveItemAtURL:location toURL:[NSURL fileURLWithPath:cacepath] error:nil]; }];
// 3、执行任务
[task resume];
} -
补充
这里是从网络上面获取图片,方法本身是帮你写到了沙盒中的tmp文件夹中去,因为tmp是临时文件夹,处于不安全的,所以这里就把写入的图片移动到沙盒的Caches中去了,但是它的缺点为不能获取下载的进度,不能让界面实时更新,在后面的文章中,我会以Demo的形式展现出来。
-
-
NSURLSessionUploadTask
这里的话上传和进度下载会在后面抽取两篇文章出来,这里就不简约展示了