1、概述浏览器
n NSURLSession是iOS7中新的网络接口,与NSURLConnection是并列的。缓存
n 当程序在前台时,NSURLSession与NSURLConnection大部分能够互相替代安全
n NSURLSession支持后台网络操做,除非用户强行关闭服务器
n NSURLSession提供的功能:cookie
p 经过URL将数据下载到内存网络
p 经过URL将数据下载到文件系统session
p 将数据上传到指定URL异步
p 在后台完成上述功能性能
p 对于小型数据,例如用户登陆、下载小图像、JSON & XML仍然使用NSURLConnection的异步或同步方法便可测试
2、NSURLSession的使用
n 使用NSURLSessionConfiguration来配置NSURLSession对象
n 用NSURLSession对象来启动一个NSURLSessionTask对象
n 也可使用系统全局的sharedSession单例来知足大多数的需求
n 注:相比较NSURLConnection的返回处理,NSURLSession提供了灵活的数据返回方式,可使用简单的block方式来处理返回数据,也可使用更强大的delegate
3、NSURLSessionConfiguration
n 做用:用于定义和配置NSURLSession对象
n 每个NSURLSession对象均可以设置不一样的NSURLSessionConfiguration,从而知足应用内不一样类型的网络请求
n NSURLSessionConfiguration的三种类型:
(1) defaultSessionConfiguration默认session配置,相似NSURLConnection的标准配置,使用硬盘来存储缓存数据
(2) ephemeralSessionConfiguration临时session配置,与默认配置相比,这个配置不会将缓存、cookie等存在本地,只会存在内存里,因此当程序退出时,全部的数据都会消失
(3) backgroundSessionConfiguration后台session配置,与默认配置相似,不一样的是会在后台开启另外一个线程来处理网络数据
4、NSURLSessionTask
n NSURLSession使用NSURLSessionTask来具体执行网络请求的任务
n NSURLSessionTask支持网络请求的取消、暂停和恢复,好比下载文件暂停以后再恢复就可以自动从上次的进度继续下载
n NSURLSessionTask还能获取数据的读取进度
n NSURLSessionTask的三种类型:
(1) NSURLSessionDataTask 处理通常的NSData数据对象,好比经过GET或POST方式从服务器获取JSON或XML返回等等,但不支持后台获取
(2) NSURLSessionUploadTask 用于上传文件,支持后台上传
(3) NSURLSessionDownloadTask 用于下载文件,支持后台下载
例如:
#pragma mark - 用Session上传头像
- (void)uploadFile
{
// 1. NSURL
NSString *urlString = @"http://localhost/uploads/测试一下.png";
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString];
// NSURL *url = [NSURL URLWithString:@"http://localhost/uploads/测试一下.png"];
// 2. Request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0];
request.HTTPMethod = @"PUT";
// 设置用户受权
// 1> "admin:123456"
NSString *authStr = @"admin:123456";
// 2> result = 对字符串进行BASE64编码(网络传输中经常使用的一种编码格式,NSData)
NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
NSString *result = [authData base64EncodedStringWithOptions:0];
// 3> "Basic result" => 提交给服务器的验证字符串,用来验证身份
NSString *authString = [NSString stringWithFormat:@"Basic %@", result];
// 设置HTTP请求头的数值,设置用户受权
[request setValue:authString forHTTPHeaderField:@"Authorization"];
// 3. Session,有一个单例,是全局共享的
NSURLSession *session = [NSURLSession sharedSession];
// 4. 文件上传
NSURL *bundleURL = [[NSBundle mainBundle] URLForResource:@"头像1.png" withExtension:nil];
// 全部任务默认都是挂起的
NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromFile:bundleURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// 上传完成操做
NSLog(@"%@", response);
}];
[task resume];
}
5、经过HTTP PUT方法实现文件上传的步骤
n 实例化NSMutableURLRequest并指定HTTPMethod为PUT
n 设置请求的受权
(1) 受权字符串格式:用户名:口令
(2) 受权模式:Basic base64编码的受权字符串
(3) 为HTTPHeaderField的Authorization赋值
6、文件上传的请求部分
// 1. URLRequest
NSURL *url = [NSURL URLWithString:@"http://localhost/uploads/xxx.png"];
NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f];
requestM.HTTPMethod = @"PUT";
// 设置用户受权
// 1> 受权字符串(用户名+密码)
NSString *authStr = @"admin:123456";
// 2> BASE 64编码
NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64Str = [authData base64EncodedStringWithOptions:0];
NSString *auth = [NSString stringWithFormat:@"BASIC %@", base64Str];
[requestM setValue:auth forHTTPHeaderField:@"Authorization"];
75、HTTP的常见方法
n GET 获取指定资源
n POST 2M 向指定资源提交数据进行处理请求,在RESTful风格中用于新增资源
n HEAD 获取指定资源头部信息
n PUT 替换指定资源(不支持浏览器操做)
n DELETE 删除指定资源
n OPTIONS 容许客户端查看服务器的性能
n TRACE 回显服务器收到的请求,主要用于测试或诊断
n CONNECT 预留给可以将链接改成管道方式的代理服务器(HTTP代理使用)
n 提示: