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;