Ich versuche, in meiner HTTP-Anfrage ein Cookie zu setzen, und ich dachte, dass der folgende Code funktionieren würde:

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

Aber dieser Code funktioniert nicht. Hat jemand eine Idee, wie man es einstellt?

14
Mohsen Shakiba 4 Jän. 2016 im 15:18

4 Antworten

Beste Antwort

Aktualisierte Antwort für Swift 3

Sie möchten sich HTTPCookieStorage ansehen.

// 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)

Ursprüngliche Antwort für Swift 2

Sie möchten sich NSHTTPCookieStorage ansehen.

// 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)
23
Jeffery Thomas 20 Juni 2017 im 01:18

So funktioniert es in Swift 3.x, nachdem Sie das Cookie mit HTTPCookieStorage festgelegt haben

let cookies=HTTPCookieStorage.shared.cookies(for: URL(string: cookieURL)!)
let headers=HTTPCookie.requestHeaderFields(with: cookies!)
let request  = NSMutableURLRequest(url: requestURL!)
request.allHTTPHeaderFields=headers
2
Rujoota Shah 4 Apr. 2017 im 05:35

Swift 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)")
}
3
TimBigDev 16 März 2020 im 05:34

Dies kann für jemanden nützlich sein (Swift 5). Vermeiden Sie die Verwendung von NSMutableURLRequest in Swift. Folgen Sie stattdessen dem folgenden Ausschnitt:

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
}
0
Rishi 13 Feb. 2020 im 12:19