iOS 加载 Cookie 机制

网络请求的 Cookie 是放在 HTTP Header中,以 “Cookie” 为 Key的值中,Value是一个字符串,类似“key1=value1;key2=value2”。

Cookie 与 ContentType, UserAgent 等在 HTTP Header 中处于平等位置

⚠️注意:
有些请求来源的 header 里的字段大小写不标准,是 cookie, 注意兼容。

在 iOS 的网络请求中,设置Cookie有两种方法:

  1. HTTPCookieStorage.shared.setCookie
  2. request.addValue(cookieString, forHTTPHeaderField: "Cookie")

HTTPCookieStorage 方式

该方式将 Cookie 存储到 Cookie Storage 中,这是一个单例,整个APP共享一个缓存

当发生某个请求时,URLSession 会从 Cookie Storage 读取与当前请求匹配的URL的 Cookie 放到 HTTP Header 中

多个 Cookie 会合并

自定义 request 方式

示例代码

let url = URL(string: "https://your-url.com")!
var req = URLRequest(url: url)
if let cookie1 = url.cookie(value: "-----", forName: "A"), 
let cookie2 = url.cookie(value: "++++++", forName: "B") {
    let dict = ["Cookie": [cookie1, cookie2].cookieString]
    dict.forEach { (key, value) in
        req.addValue(value, forHTTPHeaderField: key)
    }
}

cookie(value: , forName: )cookieString方法参考Extension

提示:
当request 的 Header 自定义了 Cookie, URLSession 将不在自动从 Cookie Storage 加载其他 Cookie。如果想保留,需要手动读取、合并。

di

results matching ""

    No results matching ""