NSURLSession的介绍和说明
来源:互联网 发布:中国茶叶出口数据2017 编辑:程序博客网 时间:2024/04/27 09:11
相关组件
- NSURLSession
- NSURLSessionConfiguration
- NSURLSessionDataTask
- NSURLSessionUploadTask
- NSURLSessionDownloadTask
与NSURLConnection对比
改进是可以配置每个session的缓存,协议,cookie以及credential policy。每个NSURLSession对象都是一个NSURLSessionConfiguration对象来进行初始化,指定那些策略和增强移动设备上性能选项。
NSURLSessionTask
负责处理数据的加载以及文件和数据在客户端与服务器之间的上传和下载。3个子类NSURLSessionDataTask,NSURLSessionUploadTask,NSURLSessionDownloadTask可以直接使用。这三个子类完成最基本的网络任务,获取JSON或XML数据,上传和下载文件。
所有task都是可以取消,暂停或恢复的。当download task取消时,可以通过选项创建一个resume data传递给下一次新创建的download task继续download
Get请求
NSURL *URL = [NSURL URLWithString:@"http://example.com"];NSURLRequest *request = [NSURLRequest requestWithURL:URL];NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { // ... }];[task resume];
上传NSData
NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];NSURLRequest *request = [NSURLRequest requestWithURL:URL];NSData *data = ...;NSURLSession *session = [NSURLSession sharedSession];NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:data completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { // ... }];[uploadTask resume];
下载
NSURL *URL = [NSURL URLWithString:@"http://example.com/file.zip"];NSURLRequest *request = [NSURLRequest requestWithURL:URL];NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request completionHandler: ^(NSURL *location, NSURLResponse *response, NSError *error) { //download是一点点将数据写入本地临时文件,完成后需要将文件从临时地方转移到一个永久地址保存起来。 NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; NSURL *documentsDirectoryURL = [NSURL fileURLWithPath:documentsPath]; NSURL *newFileLocation = [documentsDirectoryURL URLByAppendingPathComponent:[[response URL] lastPathComponent]]; [[NSFileManager defaultManager] copyItemAtURL:location toURL:newFileLocation error:nil];}];[downloadTask resume];
NSURLSession的delegate方法
NSURLSession的task的delegate用来处理鉴权查询,session的delegate处理连接层,如服务器信任,客户端证书评估,NTLM和Kerberos协议问题,task处理网络请求的如Basic,Digest以及Proxy authentication等。
表示请求结束的delegate是-URLSession:task:didCompleteWithError:
NSURLSessionConfiguration
可以找到任何你想要进行配置的选项。包括可用网络,cookie,安全性,缓存策略,自定义协议,启动事件的设置,移动设备优化。
NSURLSessionConfiguration的工厂方法
- +defaultSessionConfiguration:标准configuration,具有相同共享NSHTTPCookieStorage,共享NSURLCache和共享NSURLCredentiaStorage
- +ephemeralSessionConfiguration:实现秘密浏览,不会对缓存,Cookie和证书持久性存储
- +backgroundSessionConfiguration:(NSString *)identifier:
配置属性
NSURLSessionConfiguration有20个可配属性。
基本配置
- HTTPAdditionalHeaders:设置请求的header,跨session共享信息如内容类型,语言,User agent和Author
NSString *userPasswordString = [NSString stringWithFormat:@"%@:%@", user, password];NSData * userPasswordData = [userPasswordString dataUsingEncoding:NSUTF8StringEncoding];NSString *base64EncodedCredential = [userPasswordData base64EncodedStringWithOptions:0];NSString *authString = [NSString stringWithFormat:@"Basic %@", base64EncodedCredential];NSString *userAgentString = @"AppName/com.example.app (iPhone 5s; iOS 7.0.2; Scale/2.0)";configuration.HTTPAdditionalHeaders = @{@"Accept": @"application/json", @"Accept-Language": @"en", @"Authorization": authString, @"User-Agent": userAgentString};
- networkServiceType:一般不需要设置这个。
- allowsCellularAccess和discretionary:后台传输使用discretionary这个属性。
- timeoutIntervalForRequest和timeoutIntervalForResource:前者是packet之间请求时间。如果希望限制整体超时时间,使用后者timeoutIntervalForResource
- HTTPMaximumConnectionsPerHost:限制连接到主机的数量
- HTTPShouldUsePipelining:默认禁止,因为很多服务器没有支持
- sessionSendsLaunchEvents:session是否应该从后台启动
- connectionProxyDictionary:指定连接的代理服务器。
Cookie策略
- HTTPCookieStorage:默认情况会使用NSHTTPCookieStorage的+sharedHTTPCookieStorage这个单例,跟NSURLConnection一样。
- HTTPCookieAcceptPolicy:设置什么情况session应该接收服务器发出的cookie
- HTTPShouldSetCookies:是否该存储cookie
安全策略
- URLCredentialStorage:默认情况会使用NSURLCredentialStorage的+sharedCredentialStorage这个单例,跟NSURLConnection一样。
- TLSMaximumSupportedProtocol和TLSMinimumSupportedProtocolLinux:是否支持SSL协议
缓存策略
- URLCache:默认情况会使用NSURLCache的+sharedURLCache这个单例,跟NSURLConnection一样。
- requestCachePolicy:设置什么时候应该缓存返回的响应。
自定义协议
- protocolClasses:是NSURLProtocol的子类,配置自定义协议的数组。
除非注明,均为Starming星光社原创,微信公共号 starming-weixin 发现更多,转载请注明本文地址:http://www.starming.com/index.php?v=index&view=68
- NSURLSession的介绍和说明
- NSURLSession介绍
- NSURLSession的学习和使用
- NSURLSession的上传和下载
- NSURLSession和NSURLConnection 的区别
- NSURLSession 和 NSURLConnection的区别
- NSURLSession的介绍与基本用法
- 关于NSURLSession的上传和下载
- 关于NSURLSession的上传和下载
- 关于 NSURLSession 的上传和下载
- NSURLSession的用法详解和设计原理
- NSUrlSession 网络会话介绍
- 介绍NSURLSESSION网络请求套件
- 介绍NSURLSESSION网络请求套件
- 介绍NSURLSESSION网络请求套件
- ios7 NSURlSession 和 NSURLConnection
- NSURLSession下载和断点续传
- NSURLSession和NSURLConnection比较
- poj3415 Common Substrings (后缀数组+单调队列)
- POJ 3744 Scout YYF I (矩阵相乘+概率DP)
- 十一、图的存储---(2)邻接矩阵和邻接表
- Leetcode - Compare Version Numbers
- HDU 1166 线段树
- NSURLSession的介绍和说明
- Android 发布项目到 jcenter 遇到的坑
- linux上修改时间
- iOS视图控制器编程指南 --- 视图控制器层次结构
- 1026. 程序运行时间(15)
- 英语的五种基本句型
- 正向代理与反向代理
- Caffe学习系列(3):im2col
- 《UNIX环境高级编程》(进程环境)