NSURLSession 简介
2016-07-03 21:39
405 查看
步骤:
(1) 得到 session 对象, NSURLSession *session = [NSURLSession sharedSession];
(2) 创建一个task, 任何一个请求都是一个任务
(1) 得到 session 对象, NSURLSession *session = [NSURLSession sharedSession];
(2) 创建一个task, 任何一个请求都是一个任务
NSURLSessionDataTask // 普通任务 NSURLSessionDownLoadTask // 文件下载任务 NSURLSessionUploadTask // 文件上传任务
NSURLSession 实现 GET 请求
- (IBAction)login { //判断账号与密码是否为空 NSString *name = _accountText.text; if (name == nil || name.length == 0){ NSLog(@"请输入账号"); return; } NSString *pwd = _pwdText.text; if (pwd == nil || pwd.length == 0){ NSLog(@"请输入密码"); return; } //创建URL NSString *urlStr = [NSString stringWithFormat:@"http://localhost:8080/Server/login?username=%@&pwd=%@", name, pwd]; //用NSURLSession实现登录 [self sessionWithUrl:urlStr]; } - (void)sessionWithUrl:(NSString *)urlStr{ NSURL *url = [NSURL URLWithString:urlStr]; //用NSURLConnection实现登录 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"GET"; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if (data == nil || error != nil) { NSLog(@"请求失败"); return; } //JSON解析 NSError *error2; NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error2]; if (error2) { NSLog(@"解析失败 -- %@", error2); } NSLog(@"数据为 -- %@", dict); }]; [task resume]; }
NSURLSession 实现 POST 请求:
- (IBAction)login { //判断账号与密码是否为空 NSString *name = _accountText.text; if (name == nil || name.length == 0){ NSLog(@"请输入账号"); return; } NSString *pwd = _pwdText.text; if (pwd == nil || pwd.length == 0){ NSLog(@"请输入密码"); return; } //用NSURLSession实现登录 //创建URL NSString *urlStr = @"http://localhost:8080/Server/login"; [self sessionWithUrl:urlStr]; } - (void)sessionWithUrl:(NSString *)urlStr{ NSURL *url = [NSURL URLWithString:urlStr]; //用NSURLConnection实现登录 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //POST请求 request.HTTPMethod = @"POST"; NSString *prama = [NSString stringWithFormat:@"username=%@&pwd=%@", _accountText.text, _pwdText.text]; //中文转码 [prama stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //转码 request.HTTPBody = [prama dataUsingEncoding:NSUTF8StringEncoding]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if (data == nil || error != nil) { NSLog(@"请求失败"); return; } //JSON解析 NSError *error2; NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error2]; if (error2) { NSLog(@"解析失败 -- %@", error2); } NSLog(@"数据为 -- %@", dict); }]; [task resume]; }
NSURLSession 实现 断点续传:
//断点下载 @property (nonatomic, strong) NSURLSession *session; @property (nonatomic, strong) NSURLSessionDownloadTask *task; @property (nonatomic, strong) NSData *resumeData; @property (weak, nonatomic) IBOutlet UIProgressView *progressView; //懒加载 - (NSURLSession *)session{ if (!_session) { NSURLSessionConfiguration *cfg = [NSURLSessionConfiguration defaultSessionConfiguration]; _session = [NSURLSession sessionWithConfiguration:cfg delegate:self delegateQueue:[NSOperationQueue mainQueue]]; } return _session; } /** * NSURLSession实现断点下载 */ - (IBAction)startDowbLoad:(id)sender { NSURL *url = [NSURL URLWithString:@"http://localhost:8080/Server/resources/videos/minion_01.mp4"]; self.task = [self.session downloadTaskWithURL:url]; //开始下载 [self.task resume]; } /** * 暂停下载 */ - (IBAction)pauseDownLoad:(id)sender{ __weak typeof (self) vc = self; /** * @param resumeData 包含了继续下载开始的位置和下载的URL */ [self.task cancelByProducingResumeData:^(NSData * _Nullable resumeData) { vc.resumeData = resumeData; self.task = nil; }]; } /** * 恢复下载 */ - (IBAction)resumeDownLoad:(id)sender { //传入上次下载的数据 self.task = [self.session downloadTaskWithResumeData:self.resumeData]; //开始下载 [self.task resume]; //清空 self.resumeData = nil; } #pragma mark - NSURLSessionDelegate 代理方法 //下载完成调用 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{ //下载完成后,写入 caches 文件中 NSString *cachesFile = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:downloadTask.response.suggestedFilename]; NSFileManager *mgr = [NSFileManager defaultManager]; [mgr moveItemAtPath:location.path toPath:cachesFile error:nil]; } /** * 下载过程中调用这个方法, 每当下载完(写完)一部分时会调用, (可能被调用多次) * * @param bytesWritten 这次写了多少 * @param totalBytesWritten 累计写了多少 * @param totalBytesExpectedToWrite 文件的总长度 */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{ self.progressView.progress = (double)totalBytesWritten / totalBytesExpectedToWrite; } //恢复下载的时候调用 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes{ }
相关文章推荐
- android wifi 无线调试
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 虚拟化基础架构Windows 2008篇之10-使用WDS安装Windows 7
- 拨号网络的简单知识
- 菜鸟必看网络名词
- 通晓网络测试常用命令
- 网络路由技术及运用2
- IP网络路由技术
- 网络防火墙的设置技巧
- 网络管理之IP地址篇
- 网络路由技术及运用3
- 网络路由技术及运用4
- 网络路由技术及运用1