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: 当前会话状态

你可能感兴趣的:(swift原生网络请求 URLSession)