1、网络传输的知识点总结
(1)网络请求的方法有POST、GET(这两种是重要的)还有其他。
HTTP请求包的结构包括两个部分:请求头、请求体
POST请求:是向服务器提交数据的一种请求方法。有请求体和请求头
GET请求:是向服务器索取数据的一种请求方式。只有请求头
GET、POST请求,客户端向服务器端提交的数据,可以放入请求体或URL后面
(2)发送网络的基本流程
a)创建URL
NSURL *url = [NSURL URLWithString:@"http:www.baidu.com"];b)创建Request(请求对象)
/** <#(nonnull NSURL *)#> :url <#(NSURLRequestCachePolicy)#>:设置缓存策略 <#(NSTimeInterval)#>:超时处理 */ (1)NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120];//这个只能设置很少的选项,一般使用其子类 (2)//大多数情况下使用NSURLRequest的子类 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60]; //设置请求方式 request.HTTPMethod = @"POST"; //设置请求体 request.HTTPBody = _data; //设置请求头 [request setValue:@"hello World" forKey:@"status"];c)创建会话(session),一个会话可以发起多个任务(task)
//(1)使用NSURLSession 创建 NSURLSession *session = [NSURLSession sharedSession]; //(2)使用NSURLSessionConfiguration创建 NSURLSessionConfiguration 用于配置创建Session的类型 /*·三个类方法: ·+defaultSessionConfiguration 用于创建默认类型的Session对象 ·+ephemeralSessionConfiguration 用于创建临时类型的Session对象 ·+backgroundSessionConfiguration:(NSString *)identifier 用于创建后台 Session对象 */ //1.创建Session配置对象 NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; //2.创建Session对象 NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig]; /**NSURLSessionConfiguration设置了很多选项 requestCachePolicy 设置缓存策略 networkServiceType 设置网络服务的类型:网络流量、网络电话、语音、视频 timeoutIntervalForRequest 设置超时时间 HTTPAdditionalHeaders 设置请求头 discretionary 用于后台请求、会把wifi和电量的可用性考虑在内 allowsCellularAccess 是否使用蜂窝数据 */d)创建任务(task)
(1)NSURLSessionDataTask : 数据任务 NSURLSessionUploadTask :上传任务 NSURLSessionDownloadTask :下载任务 NSURLSessionDataTask *task = [session dataTaskWithRequest:request];e)启动(恢复)任务
[task resume];(2)监听数据传输任务
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; //创建session,并且设置代理 NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]]; //代理方法主要有: //可以获得下载任务和存储路径 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location; //可以获得已经下载的大小和文件的整个大小从而获得下载的进度 /* bytesWritten:本次下载传输的字节 totalBytesWritten:已经下载的字节 totalBytesExpectedToWrite:文件的总大小 */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite: (int64_t)totalBytesExpectedToWrite;