swift原生网络请求 URLSession

用AF太爽了 以至于原生的网络请求都不会写了,这让今天面试的我非常尴尬,恰逢首次搭建服务器完成,于是就写下原生求求搞搞事

URLRequest

请求类,包含一些请求的属性,包括请求头,请求体,请求路径等.对应OC中的NSURLReques

var request = URLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 30)

初始化一个请求对象 url不必说 cachePolicy是缓存策略,决定是否使用缓存,详细介绍->缓存策略 timeoutInterval表示超时时间

request.httpMethod = "POST"

设置请求方式,常用的就是GET和POST,其他方式并不常用,不列举了

request.setValue("text/html", forHTTPHeaderField: "Content-Type")
request.addValue("value", forHTTPHeaderField: "custom")

设置请求头或者添加一个请求头字段 字段详解

let str = "id=10&name=wangwuhua"
let data = str.data(using: .utf8)
request.httpBody = data

GET参数是在url中包含的,如果是POST就需要像上面那样设置请求体了

URLSession

会话类,负责网络通讯,包含请求,上传,下载三种通讯方式,对应OC的NSURLSession 通常使用它的单利对象就可以了

        let request = URLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 30)
        let session = URLSession.shared
        let dataTask = session.dataTask(with: request) { (data, respons, error) in
            
            print(error as Any)
            if data == nil {return}
            if respons == nil {return}
            
            let str = String(data: data!, encoding: .utf8)
            print(str as Any)
            print(respons!)
        }
        dataTask.resume()

这是一个完整的GET请求dataTask是URLSessionTask的子类URLSessionDataTask的对象,请求不是自动开启的 需要手动调用dataTask.resume方法开启

URLSessionTask

管理请求生命周期的类,包含子类URLSessionDataTask URLSessionUploadTask URLSessionDownloadTask URLSessionStreamTask

作用 父类
URLSessionDataTask 请求数据 URLSessionTask
URLSessionUploadTask 上传数据 URLSessionDataTask
URLSessionDownloadTask 下载数据 URLSessionTask
URLSessionStreamTask tcp/upd长连接 URLSessionTask

URLSessionTask的主要作用就是管理会话的状态,主要方法有:
cancel: 取消本次会话
suspend: 暂停本次会话
resume: 开始或继续
state: 当前会话状态

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,734评论 2 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 3,510评论 2 4
  • 阅读目录 一、整体介绍 二、使用的一般步骤 三 举例 四 NSURLSessionConfiguration 附录...
    九洲仙人阅读 852评论 1 3
  • 在安静中,不慌不忙地坚强。
    傅澈阅读 364评论 0 0