二、创建并配置NSURLSession 通过NSURLSessionConfiguration类对象对NSURLSession进行配置与创建,创建和配NSURLSession的示例代码如下 : //默认类型的 NSURLSessionConfiguration * defaultConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration ]; //即时类型的 NSURLSessionConfiguration * ephemeralConfiguration = [NSURLSessionConfiguration ephemeralSessionConfiguration ]; //后台类型的 NSURLSessionConfiguration * backgroundConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier 通过block的方式进行请求代码如下: //创建session配置对象 NSURLSessionConfiguration * defaultConfiguration = [NSURLSessionConfiguration
应用场景: 1、 自定义请求头的HTTPHeaderField 2、针对NSURLSessionConfiguration设置代理和端口,让一些特殊的请求走自定义的隧道IP和端口 I NSURLProtocol * config; config = [NSURLSessionConfiguration defaultSessionConfiguration]; #pragma mark - ******** 针对NSURLSessionConfiguration设置代理和端口 NSString* proxyHost = @"socks-"; *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; config.connectionProxyDictionary *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; configuration.connectionProxyDictionary
那这个NSURLSessionConfiguration都有哪些配置呢? 接着往下看 NSURLSessionConfiguration 有三个方法来创建NSURLSessionConfiguration: defaultSessionConfiguration 使用全局的cache 一旦创建了NSURLSessionConfiguration就可以给它设置各种属性 看NSURLSessionConfiguration的头文件: @interface NSURLSessionConfiguration : NSObject <NSCopying> /* 三种创建方式 */ + (NSURLSessionConfiguration *)defaultSessionConfiguration; + (NSURLSessionConfiguration *)ephemeralSessionConfiguration; + (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { }]; // 设置代理 - (NSURLSessionConfiguration *)setProxyWithConfig { NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration
使用方法 2.1 AFURLSessionManager AFURLSessionManager用于,基于一个指定的NSURLSessionConfiguration对象,创建和管理NSURLSession 2.1.1 创建一个下载任务 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration error:nil]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration "txt"]] name:@"file" fileName:@"myText.txt" mimeType:@"text/plain"]; } error:nil]; 2.1.4 创建一个数据 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; AFURLSessionManager *manager
` with common usage parameter values. */ // 默认的NSURLSessionConfiguration具有常用的使用参数值。 + (NSURLSessionConfiguration *)defaultURLSessionConfiguration; /** Default initializer @return An ` */ - (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration; /** - (instancetype)init { // 调用defaultURLSessionConfiguration类方法进行配置 NSURLSessionConfiguration * *)defaultURLSessionConfiguration { NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration
AAFNetworking(文件下载)效果.gif AFNetworking实现文件下载总共四步: 创建会话管理者 创建下载路径和请求对象 创建下载任务 启动下载任务 具体实现代码如下: NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; // 1. _manager) { NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration
urlStr completionHandler:(void (^)(NSDictionary * patchInfo, NSError * error))completionHandler { NSURLSessionConfiguration * defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession * * defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession * *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *defaultSession *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *defaultSession
创建configuration(配置) // NSURLSessionConfiguration 有3个工厂方法 // default: 共享 NSHTTPCookieStorage, NSURLCache 证书, 适用于秘密浏览 // backgroundWithID: 可以在程序 挂起、退出、崩溃 的情况下, 上传和下载任务, ID用于向任何可能在进程外恢复后台传输的守护进程(daemon)提供上下文 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; // 2. 创建configuration(配置) NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration (同downloadTask的1-2) NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration
item.title);}@endint main(int argc, const char * argv[]) { @autoreleasepool { // 设置代理服务器 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; configuration.connectionProxyDictionary // 运行RunLoop以允许异步操作完成 [[NSRunLoop currentRunLoop] run]; } return 0;}}在上面的代码中,我们首先配置了一个NSURLSessionConfiguration
NSURLSession将NSURLConnection替换为NSURLSession和NSURLSessionConfiguration,以及3个NSURLSessionTask的子类:NSURLSessionDataTask delegate:self delegateQueue:[[NSOperationQueuealloc]init]]; 关于NSURLSession的配置有三种类型: //默认的配置会将缓存存储在磁盘上 +(NSURLSessionConfiguration *)defaultSessionConfiguration; //瞬时会话模式不会创建持久性存储的缓存 +(NSURLSessionConfiguration*)ephemeralSessionConfiguration ; //后台会话模式允许程序在后台进行上传下载工作 +(NSURLSessionConfiguration*)backgroundSessionConfigurationWithIdentifier:( *configure = [NSURLSessionConfiguration defaultSessionConfiguration]; NSOperationQueue *queue =[[NSOperationQueue
NSURLProtocol registerClass:[CFHttpMessageURLProtocol class]]; 对于NSURLSession的请求,注册NSURLProtocol的方式稍有不同,是通过NSURLSessionConfiguration 注册的 // NSURLSession例子 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession (class, readonly, strong) NSURLSession *sharedSession; + (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration; + (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration iOS系统框架整个网络请求的流程如下: 将网址字符串封装成NSURL,然后将NSURL封装成NSURLRequest; 创建一个NSURLSessionConfiguration对象,并进行对应的个性化配置
直接上代码: NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration
downloadTimeout; //session运行模式,默认使用默认模式,即 defaultSessionConfiguration @property (readonly, nonatomic, nonnull) NSURLSessionConfiguration headersFilter; //初始化方法,不使用全局共享的downloader时创建 - (nonnull instancetype)initWithSessionConfiguration:(nullable NSURLSessionConfiguration ,NSURLSession运行在默认模式下 - (nonnull instancetype)init { return [self initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; } //初始化方法 - (nonnull instancetype)initWithSessionConfiguration:(nullable NSURLSessionConfiguration } return self; } //创建指定运行模式的NSURLSession对象,可能已经创建过了 - (void)createNewSessionWithConfiguration:(NSURLSessionConfiguration
NSURLSessionConfiguration 配置简单说明 NSURLSessionConfiguration对象用于初始化NSURLSession对象。 当NSURLSession开启多个任务Task的时候可以用NSURLSessionConfiguration对象统一配置。 NSURLSessionConfiguration有三个类构造函数 defaultSessionConfiguration返回标准默认配置,一般我们都使用这个 ephemeralSessionConfiguration NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; / NSURLSessionDownloadTask的创建 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration
backgroundSessionConfigurationWithIdentifier: 后台模式, 完成上传下载, 需要给一个ID, 用于追踪完成工作的Session是哪一个(当程序切到后台, 这个任务也会继续下载) //一般模式 NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; /***************** URLSession
init] 非主队列: 代理方法在子线程中调用 */ NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; // 1. _manager) { NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration 不过据我观察,可能没那么简单,新的iOS11系统新增了多路TCP即Multipath-TCP,因而也为NSURLSession和NSURLSessionConfiguration提供了新的属性multipathServiceType API_UNAVAILABLE(macos, watchos, tvos) NS_SWIFT_NAME(URLSessionConfiguration.MultipathServiceType); NSURLSessionConfiguration.h
2、设置body AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration
5.2.1 NSURLSessionConfiguration类 5.2.1.1 简介 其中NSURLSessionConfiguration用于配置会话的属性,可以通过该类配置会话的工作模式: [objc + (NSURLSessionConfiguration *)defaultSessionConfiguration; 2. *)defaultSessionConfiguration; + (NSURLSessionConfiguration *)ephemeralSessionConfiguration; + (NSURLSessionConfiguration NSURLSessionConfiguration *defaultConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfiguration:kBackgroundSessionID