NSURLSession
本身是抽象类 ,我是也是使用它的子类 :
- download data upload
然后创建task 来完成 。
创建session
NSURLSession *session = [NSURLSession sharedSession];
加入任务
NSURLSessionTask *task = [session dataTaskWithRequset:[NSURLRequest requestWithURL[NSURL URLWithString xxx]] completionHandler:^(NSData *data){
//data 就是服务器返回的数据
[NSJSONSerialization JSONObjectWithData:data option:kNilOption error:nil];
}];
启动任务
[task resume];
创建post 请求
需要创建一个可变的NSMutableURLRequest来设置请求头等信息。
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL urlWithString:xxxx]];
request.HTTPMethod = @"POST";
request.HTTPBody = [@"xxxx" dataWithEncoding:NSUTF8StringEncoding];
下载
下载以后 ,默认的下载的文件会放在temp文件 ,然后我们自己要移动文件到需要的地方 。
代理方法 。
< NSURLSessionDataDelegate >
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
创建任务
NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=4324"]]];
启动任务
[task resume];
#pragma mark - <NSURLSessionDataDelegate>
/**
* 1.接收到服务器的响应
*/
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
NSLog(@"%s", __func__);
// 允许处理服务器的响应,才会继续接收服务器返回的数据
//从响应头里查看服务器给我们的响应是不是我们想要的 ,然后决定是不是继续下载数据操作 。
completionHandler(NSURLSessionResponseAllow);
// void (^)(NSURLSessionResponseDisposition)
}
/**
* 2.接收到服务器的数据(可能会被调用多次)
*/
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
NSLog(@"%s", __func__);
}
/**
* 3.请求成功或者失败(如果失败,error有值)
*/
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
NSLog(@"%s", __func__);
}
大文件下载
断点回复下载的时候 ,需要注意 ,默认下载的文件都是下载到temp文件中 。所以暂停的时候,要把task 和temp 中的文件都保存起来 。因为temp可能随时释放 。
但是 ,回复时候,task 还是会去temp找文件 。
需要增停的时候 。要调用 [task suspend]
如果是调用的停止方法 。cancel 。任务就不能恢复了 。