Reputation: 281
I have to post Cookie in Alamofire.
I'm storing cookies after the first login.
After logins, I must post this cookie together.
But it doesn't work.
// 1. restore cookie
let cookie = HTTPCookieStorage.restore() // my custom function.
// 2. set cookie
Alamofire.Session.default.sessionConfiguration.httpCookieStorage?.setCookie(cookie)
// 3. check cookie
print(Alamofire.Session.default.sessionConfiguration.httpCookieStorage?.cookies?.first) // Cookies were set correctly.
// 4. post request
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { (response) in
if response.response?.statusCode == 200 {
print("success")
} else {
print("fail")
}
}
But response is always fail.
Am I wrong to set cookies?
I need your help. Thanks.
=============================== Addition
Thank you for your answer. I had tried your code like this.
guard let cookie = HTTPCookieStorage.restore() else { return }
let configuration = URLSessionConfiguration.af.default
configuration.httpCookieStorage?.setCookie(cookie)
let session = Session(configuration: configuration)
session.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { (response) in
if response.response?.statusCode == 200 {
print("success")
} else {
print("fail")
}
But sometimes it succeeds but most crash.
Crash message is Fatal error: dataTask received data for incorrect Request subclass: nil: file /Users/J/Documents/AJLiOS/Pods/Alamofire/Source/SessionDelegate.swift, line 189
Do you have any doubts?
Upvotes: 1
Views: 1021
Reputation: 12790
You cannot modify the the configuration
of a URLSession
after the URLSession
has been initialized, see Apple's documentation.
In Alamofire 5, you can initialize your own Session
instance and set the cookies there:
let configuration = URLSessionConfiguration.af.default
configuration.httpCookieStorage?.setCookie(HTTPCookieStore.restore())
let session = Session(configuration: configuration)
Upvotes: 1