How do I retrieve a cookie from a NSURLResponse in Swift?

Try to cast your NSURLResponse to a NSHTTPURLResponse and then use the property called 'allHeaderFields'. That property is a Dictionary, where you should find your Cookie.


Swift 3 update : Gives you a [HTTPCookie]

    if let url = urlResponse.url,
       let allHeaderFields = urlResponse.allHeaderFields as? [String : String] {
       let cookies = HTTPCookie.cookies(withResponseHeaderFields: allHeaderFields, for: url)
    }

// Setup a NSMutableURLRequest to your desired URL to call along with a "POST" HTTP Method

var aRequest = NSMutableURLRequest(URL: NSURL(string: "YOUR URL GOES HERE")!)
var aSession = NSURLSession.sharedSession()
aRequest.HTTPMethod = "POST"

// Pass your username and password as parameters in your HTTP Request's Body

var params = ["username" : "ENTER YOUR USERNAME" , "password" : "ENTER YOUR PASSWORD"] as Dictionary <String, String>
var err: NSError?
aRequest.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err)

// The following header fields are added so as to get a JSON response

aRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
aRequest.addValue("application/json", forHTTPHeaderField: "Accept")

// Setup a session task which sends the above request

var task = aSession.dataTaskWithRequest(aRequest, completionHandler: {data, response, error -> Void in

     // Save the incoming HTTP Response

     var httpResponse: NSHTTPURLResponse = response as! NSHTTPURLResponse

     // Since the incoming cookies will be stored in one of the header fields in the HTTP Response, parse through the header fields to find the cookie field and save the data

     let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(httpResponse.allHeaderFields, forURL: response.URL!) as! [NSHTTPCookie]

     NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookies(cookies as [AnyObject], forURL: response.URL!, mainDocumentURL: nil)

})

task.resume()