IOS-网络(NSURLSession)

  1 //
  2 //  ViewController.m
  3 //  NSURLSession
  4 //
  5 //  Created by ma c on 16/2/1.
  6 //  Copyright © 2016年 博文科技. All rights reserved.
  7 //
  8
  9 #import "ViewController.h"
 10
 11 @interface ViewController ()<NSURLSessionDownloadDelegate>
 12
 13 @end
 14
 15 @implementation ViewController
 16 /*
 17  任务:任何请求都是一个任务
 18
 19  NSURLSessionDataTask:普通的GET、POST请求
 20  NSURLSessionDownloadTask:文件下载
 21  NSURLSessionUploadTask:文件上传
 22
 23  注意:如果给下载任务设置了completionHandler这个block,也实现了下载代理方法,优先执行block
 24
 25  */
 26 - (void)viewDidLoad {
 27     [super viewDidLoad];
 28
 29     self.view.backgroundColor = [UIColor cyanColor];
 30
 31 }
 32
 33 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
 34 {
 35 //    [self sendGetRequest];
 36 //    [self sendPostRequest];
 37 //    [self downlaodTask1];
 38     [self downlaodTask2];
 39 }
 40
 41 #pragma mark - NSURLSessionDownloadTask2
 42 ///下载任务(有下载进度)
 43 - (void)downlaodTask2
 44 {
 45     //1.创建Session对象
 46     NSURLSessionConfiguration *cfg = [NSURLSessionConfiguration defaultSessionConfiguration];
 47     NSURLSession *session = [NSURLSession sessionWithConfiguration:cfg delegate:self delegateQueue:[NSOperationQueue mainQueue]];
 48     //2.创建一个任务
 49     NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/videos/minion_02.mp4"];
 50     NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url];
 51     //3.开始任务
 52     [task resume];
 53 }
 54
 55 #pragma mark - NSURLSessionDownloadDelegate的代理方法
 56 ///下载完毕时调用
 57 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
 58 {
 59     NSLog(@"didFinishDownloadingToURL--->%@",location);
 60     //location:文件的临时路径,下载好的文件
 61     NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, nil) lastObject];
 62     NSString *file = [caches stringByAppendingPathComponent:downloadTask.response.suggestedFilename];
 63
 64     //降临时文件夹,剪切或者复制到Caches文件夹
 65     NSFileManager *mgr = [NSFileManager defaultManager];
 66     [mgr moveItemAtPath:location.path toPath:file error:nil];
 67 }
 68 ///恢复下载时调用
 69 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
 70 {
 71
 72 }
 73 ///每当写完一部分就调用(根据文件大小调用多次)
 74 //bytesWritten:             这次调用写了多少
 75 //totalBytesWritten:        累计写了多少长度到沙河中
 76 //totalBytesExpectedToWrite:文件的总长度
 77 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
 78 {
 79     double progress = (double)totalBytesWritten / totalBytesExpectedToWrite;
 80
 81     NSLog(@"下载进度--->%lf",progress);
 82
 83 }
 84
 85 #pragma mark - NSURLSessionDownloadTask1
 86 ///下载任务(不能看到下载进度)
 87 - (void)downlaodTask1
 88 {
 89     //1.创建Session对象
 90     NSURLSession *session = [NSURLSession sharedSession];
 91     //2.创建NSURL
 92     NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/videos/minion_02.mp4"];
 93     NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
 94        //location:文件的临时路径,下载好的文件
 95         NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, nil) lastObject];
 96         NSString *file = [caches stringByAppendingPathComponent:response.suggestedFilename];
 97
 98         //降临时文件夹,剪切或者复制到Caches文件夹
 99         NSFileManager *mgr = [NSFileManager defaultManager];
100         [mgr moveItemAtPath:location.path toPath:file error:nil];
101
102         //[mgr copyItemAtPath:location.path toPath:file error:nil];
103
104
105     }];
106     //3.开始任务
107     [task resume];
108 }
109
110
111 #pragma mark - NSURLSessionDataTask
112 ///POST请求
113 - (void)sendPostRequest
114 {
115     //1.创建Session对象
116     NSURLSession *session = [NSURLSession sharedSession];
117
118     //2.创建NSURL
119     NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/login"];
120     //3.创建请求
121     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
122     request.HTTPMethod = @"POST";
123     //4.设置请求体
124     request.HTTPBody = [@"username=123&pwd=123" dataUsingEncoding:NSUTF8StringEncoding];
125     //5.创建一个任务
126     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
127
128         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data
129                                                              options:NSJSONReadingMutableLeaves error:nil];
130         NSLog(@"sendPostRequest:%@",dict);
131     }];
132     //6.开始任务
133     [task resume];
134 }
135
136 ///GET请求
137 - (void)sendGetRequest
138 {
139     //1.得到session对象
140     NSURLSession *session = [NSURLSession sharedSession];
141     //2.创建一个任务
142     NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/video"];
143     NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
144
145         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data
146                                                              options:NSJSONReadingMutableLeaves error:nil];
147         NSLog(@"sendGetRequest:%@",dict);
148     }];
149     //3.开始任务
150     [task resume];
151 }
152 @end
时间: 2024-08-03 23:20:21

IOS-网络(NSURLSession)的相关文章

iOS网络编程(六) NSURLSession详解

昨夜浏览Demo的时候,看到别人请求网络数据用的是NSURLSession,当时就在想这里什么,怎么没有用过,引起了我的好奇心,遂去百度-谷歌-官方文档一一查看,有了一定的了解,原来NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的. 查找资料,写了一个小Demo,大家可以看看,有什么不足的地方,可以留言帮我指出来. // // HMTRootViewController.m // // // Created by HMT on 14-6-7.

IOS网络开发NSURLSession详解(一)概述

原创blog,转载请注明出处blog.csdn.net/hello_hwc 我的IOS-SDK详解专栏,欢迎关注 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言: 这个IOS网络编程的系列计划6篇文章,NSURLSession3篇(一篇概述,一篇详细阐述三种task和delegate的使用,一篇阐述授权,证书等内容),网络的基础知识两篇(一篇REST API讲解已经写完了,一篇我会把写博客的过程中遇到的概念总结出来

IOS网络访问之NSURLSession

NSURLSession是IOS7中新添加的网络访问接口,作用与NSURLConnection一致,在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作.如果用户强制将程序关闭,NSURLSession会断掉. NSURLSession中关键类有下面几种 1:NSURLSessionConfiguration:用于配置NSURLSession工作模式以及网络设置 工作模式分为下面三种: 普通模式(default):可以使用缓存 + (NSURLSessionC

iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求

iOS网络缓存扫盲篇 --使用两行代码就能完成80%的缓存需求 下篇预告:使用80%的代码来完成剩下的20%的缓存需求 .敬请 star (右上角)持续关注. 目录 当我们在谈论缓存的时候,我们在谈论什么? GET网络请求缓存 80%的缓存需求:两行代码就可满足 控制缓存的有效性 文件缓存:借助ETag或Last-Modified判断文件缓存是否有效 Last-Modified ETag 总结 一般数据类型借助 Last-Modified 与 ETag 进行缓存 剩下20%的网络缓存需求--真的

IOS网络访问之使用AFNetworking

IOS网络访问之使用AFNetworking AFNetworking是IOS上常用的第三方网络访问库,我们可以在github上下载它,同时github上有它详细的使用说明,最新的AFNetworing2.0与1.0有很大的变化,这里仅对2.0常用的使用方法进行总结 基于NSURLConnection的API 提交GET请求 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [man

iOS网络相关知识总结

iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Request的URL, HTTPMethod, HTTPHeader, HTTPBody等信息.一般发请求尽量不要使用NSURLRequest,因为它不能设置请求方式.请求超时等(总之什么都不能设置).通常发请求都使用NSMutableURLRequest,可以进行更多的设置. 补充1:因为NSURL不支持

IOS网络访问之使用AFNetworking&lt;2&gt;

IOS网络访问之使用AFNetworking AFNetworking是IOS上常用的第三方网络访问库,我们可以在github上下载它,同时github上有它详细的使用说明,最新的AFNetworing2.0与1.0有很大的变化,这里仅对2.0常用的使用方法进行总结 基于NSURLConnection的API 提交GET请求 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [man

iOS网络编程(7) 第三方开源库-----&gt;AFNetworking

AFNetworking是一个为 iOS 和 Mac OSX 制作的令人愉快的网络库,它建立在URL 装载系统框架的顶层,内置在Cocoa里,扩展了强有力的高级网络抽象.它的模块架构被良好的设计,拥有丰富的功能,因此,使用起来,必定赏心悦目. @原文链接https://github.com/AFNetworking/AFNetworking,我在此基础上了点配置修改 @介绍 1.支持HTTP请求和基于REST的网络服务(包括GET.POST. PUT.DELETE等) 2.支持ARC 3.要求i

iOS网络编程开发—HTTP协议

iOS网络编程开发—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议 (1)HTTP 超文本传输协议,访问的是远程的网络资源,格式是http:// http协议是在网络开发中最常用的协议 (2)file 访问的是本地计算机上的资源

iOS 网络错误-分类

在进行网络数据交换的时候总是遇到各种各样的错误. 这些网络错误是来自client还是server. 我们来梳理一下: 我们将错误分为三个大类 操作系统错误 http请求错误 应用错误 1.操作系统错误是因为数据包没有到达预定目标导致的,造成原因可能有: 没有网络--没有连接网络 无法路由到目标主机--主要是因为目标主机可能位于隔离网络或者处于离线状态.导致的. 没有应用监听目标port--请求到达目标主机后数据包会发送到指定的port号.假设server没有监听这个port号或者是有太多的请求在