1.Tips:
发布版本 -> iOS7
支持HTTP 2.0
下载时直接将下载的文件存储到沙盒内的tmp文件夹(要保存的需要自行处理)
支持断点续传
支持后台下载/上传
多线程异步下载
2.使用步骤:
1.创建session对象
2.通过session创建task
3.启动task
4.根据所设置的block(delegate)处理请求返回
3.具体使用
( 1 )GET、POST请求
通过block处理请求返回
// 请求url
NSURL *url = [NSURL URLWithString:@"http://www.test.com/login"];
// 初始化request,在request中设置请求方式
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// POST请求
request.HTTPMethod = @"POST";
// GET请求
//request.HTTPMethod = @"GET";
request.HTTPBody = [@"username=Hohn&pwd=888" dataUsingEncoding:NSUTF8StringEncoding];
// 创建session对象
NSURLSession *session = [NSURLSession sharedSession];
// 创建task对象,并设置对请求的返回处理block
NSURLSessionTask *task = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//TODO 请求返回处理
}];
// 启动task
[task resume];
通过delegate处理请求返回
// 请求url
NSURL *url = [NSURL URLWithString:@"http://www.test.com/login"];
// 初始化request,在request中设置请求方式
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// POST请求
request.HTTPMethod = @"POST";
// GET请求
//request.HTTPMethod = @"GET";
request.HTTPBody = [@"username=Hohn&pwd=888" dataUsingEncoding:NSUTF8StringEncoding];
// 创建session对象
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
delegate:self
delegateQueue:[[NSOperationQueue alloc] init]];
// 创建task对象,并设置对请求的返回处理block
NSURLSessionTask *task = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//TODO 请求返回处理
}];
// 启动task
[task resume];
//对应的代理方法如下:
// 1.接收到服务器的响应
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
// 允许处理服务器的响应,才会继续接收服务器返回的数据
completionHandler(NSURLSessionResponseAllow);
}
// 2.接收到服务器的数据(可能调用多次)
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
// 处理每次接收的数据
}
// 3.请求成功或者失败(如果失败,error有值)
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
// 请求完成,成功或者失败的处理
}
通过delegate去处理请求可以更方便的控制各个阶段,从而实现断点续传等更丰富的功能,各种delegate