Swift - 如何在NSMutableURLRequest中设置cookie

Moh*_*iba 9 swift swift2

我正在尝试在我的HTTP请求中设置cookie,我认为下面的代码可以工作:

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

但是这段代码不起作用.有没有人知道如何设置它?

Jef*_*mas 19

更新了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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)


Ris*_*shi 6

这可能对某些人有用(Swift 5)。避免NSMutableURLRequest在 Swift 中使用。相反,请遵循以下代码片段:

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
}
Run Code Online (Sandbox Code Playgroud)


Tim*_*Dev 6

斯威夫特 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)")
}
Run Code Online (Sandbox Code Playgroud)