
Kinnouka Bokudo
When you see me, and I try to be a good man, you see yourself.
马上订阅 Kinnouka Bokudo RSS 更新: https://kinnoukabokudo.com/feed
iOS 原生 URLSession 网络请求
Kinnouka Bokudo
2018年9月2日 00:00
开发
应用无论是从服务器获取信息,还是更新社交媒体信息,抑或是下载文件,这都归功于应用核心的 HTTP 网络请求。为了帮助开发者满足网络请求的众多需求,苹果提供了 URLSession,这是一个完整的网络 API,用于发送和接收 HTTP/HTTPS 请求。 你可以通过 URLSessionConfiguration 来创建 URLSession,它有三种形式: .default:创建全局持久化本地缓存,证书和 cookie 存储对象。 .ephemeral:与默认配置类似,只是所有与任务相关的数据都存储在内存中,可将此视为「私密」任务。 .background:允许在后台执行上传或下载任务。即使应用本身被系统暂停或终止,任务仍会继续。 URLSessionConfiguration 还允许你配置其他属性,例如超时值,缓存策略和 HTTP 头部信息等。 URLSessionTask 是一个表示网络请求任务的抽象类。网络请求会创建一个或多个任务来获取数据,和上传或下载。这里有四种类型的网络请求任务: URLSessionDataTask:此任务用于 HTTP GET 请求,以将数据从服务器检索到内存。 URLSessionUploadTask:此任务通常用于 HTTP POST 或 PUT 方法将文件从本地上传到服务器。 URLSessionDownloadTask:此任务用于将文件从服务器下载到临时文件位置。 URLSessionStreamTask:此任务用于建立 TCP/IP 长连接。 您也可以暂停,恢复和取消任务。URLSessionDownloadTask 可以保存暂停时的状态,以至于恢复任务时,不用从头开始。 声明:笔者自身对 URLSession 也是初学,而本文介绍的 URLSession 知识也都是自己的一些理解,同时尽量不涉及过于原理性的内容,一切以普通工程师实用为目标原则。其中可以想象在很多地方会有理解的错误,还请多包涵。如您发现问题,也往不吝赐教指正,感激不尽。 组装 URL 在进行任何一项网络请求时,都需要配置 URL,苹果提供 URLComponents 以供开发者配置 URL。比起使用纯字符串形式的 URL,用这种方式可以根据 URLComponents 值的内容轻松获取 URL 值,反之亦然。 发起 GET 请求 发起 GET 请求时,必须先创建 URLSessionTask 对象和获取 URL 地址。为防止重复发起请求,可在 dataTask 的调用 .resume() 方法开始每次任务前,调用 .cancel() 方法。 另一种发起 GET 请求的方式,同样是调用 dataTask(with:completionHandler:) 方法,只不过第一个参数可以直接传入 URL 地址。 […]