【问题标题】:Swift - How to set cookie in NSMutableURLRequestSwift - 如何在 NSMutableURLRequest 中设置 cookie
【发布时间】:2016-01-04 12:18:08
【问题描述】:

我正在尝试在我的 HTTP 请求中设置 cookie 我认为下面的代码会起作用:

let request  = NSMutableURLRequest(URL: url)
request.HTTPMethod = "GET"
request.setValue("key=value;", forHTTPHeaderField: "Cookie")

但此代码不起作用。 有人知道如何设置吗?

【问题讨论】:

  • 它正在和我一起工作

标签: swift swift2


【解决方案1】:

Swift 3 的更新答案

你想看看HTTPCookieStorage

// First
let jar = HTTPCookieStorage.shared
let cookieHeaderField = ["Set-Cookie": "key=value"] // Or ["Set-Cookie": "key=value, key2=value2"] for multiple cookies
let cookies = HTTPCookie.cookies(withResponseHeaderFields: cookieHeaderField, for: url)
jar.setCookies(cookies, for: url, mainDocumentURL: url)

// Then
var request = URLRequest(url: url)

swift 2的原始答案

你想看看NSHTTPCookieStorage

// First
let jar = NSHTTPCookieStorage.sharedHTTPCookieStorage()
let cookieHeaderField = ["Set-Cookie": "key=value"] // Or ["Set-Cookie": "key=value, key2=value2"] for multiple cookies
let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(cookieHeaderField, forURL: url)
jar.setCookies(cookies, forURL: url, mainDocumentURL: url)

// Then
let request  = NSMutableURLRequest(URL: url)

【讨论】:

  • 在相当应用程序和重新打开 cookie 后消失了。
  • @Bunthoeun 使用 "key=value" 创建会话 cookie。如果你想要一个比会话持续时间更长的 cookie,你需要设置 max age。 "key=value;path=/;max-age=30758400" 设置一个持续 1 年的 cookie。请参阅Set-Cookie Header 了解更多信息。
【解决方案2】:

斯威夫特 5

if let cookie = HTTPCookie(properties: [
    .domain: ".my.domain.name.com",
    .path: "/",
    .name: "myCookieNameKey",
    .value: "K324klj23KLJKH223423CookieValueDSFLJ234",
    .secure: "FALSE",
    .discard: "TRUE"
]) {
    HTTPCookieStorage.shared.setCookie(cookie)
    print("Cookie inserted: \(cookie)")
}

【讨论】:

  • 如何添加多个cookie?
【解决方案3】:

这可能对某些人有用(Swift 5)。 避免在 Swift 中使用 NSMutableURLRequest。而是遵循以下 sn-p:

func request(with url: URL) -> URLRequest {
    var request = URLRequest(url: url)

    guard let cookies = HTTPCookieStorage.shared.cookies(for: url) else {
        return request
    }

    request.allHTTPHeaderFields = HTTPCookie.requestHeaderFields(with: cookies)
    return request
}

【讨论】:

    【解决方案4】:

    这是使用 HTTPCookieStorage 设置 cookie 后在 Swift 3.x 中的工作方式

    let cookies=HTTPCookieStorage.shared.cookies(for: URL(string: cookieURL)!)
    let headers=HTTPCookie.requestHeaderFields(with: cookies!)
    let request  = NSMutableURLRequest(url: requestURL!)
    request.allHTTPHeaderFields=headers
    

    【讨论】:

      猜你喜欢
      • 2015-12-01
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 2018-11-18
      • 2012-08-01
      相关资源
      最近更新 更多