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?
4 Antworten
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)
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
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)")
}
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
}
Neue Fragen
swift
Swift ist eine sichere, schnelle und ausdrucksstarke Allzweck-Programmiersprache, die von Apple Inc. für seine Plattformen und Linux entwickelt wurde. Swift ist Open Source. Verwenden Sie das Tag nur für Fragen zu Sprachfunktionen oder wenn Sie Code in Swift benötigen. Verwenden Sie die Tags [ios], [ipados], [macos], [watch-os], [tvos], [cocoa-touch] und [cocoa] für (sprachunabhängige) Fragen zu den Plattformen oder Frameworks.