如何在Alamofire中设置Cookies,以便每当我杀死应用程序并重新启动它时,都会发送相同的cookie?
使用NSHTTPCookie
[cookiesWithResponseHeaderFields(_:forURL :)]方法从响应中获取cookie。
// setCookies
func setCookies(cookies: NSHTTPCookie){
Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: response.URL!, mainDocumentURL: nil)
}
// getCookies
func getCookies() {
let parameters: [String: AnyObject] = [:]
Alamofire.request(.POST, "http://test.com/test", parameters: parameters).responseJSON { response in
if let
header = response.response?.allHeaderFields as? [String: String],
URL = response.request?.URL
{
let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(header, forURL: URL)
print(cookies)
}
}
}
斯威夫特3:
func setCookies(cookies: HTTPCookie){
Alamofire.SessionManager.default.session.configuration.httpCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil)
}
Alamofire.request(url, method: HTTPMethod.post, parameters: parameters).responseData { (responseObject) -> Void in
if let resposecode = responseObject.response?.statusCode {
if resposecode != 200 {
// error
} else {
// view all cookies
print(HTTPCookieStorage.shared.cookies)
}
}
}
Swift 3.0
let cookies = HTTPCookie.cookies(withResponseHeaderFields: response.allHeaderFields , for: response.URL!)
Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil)
Alamofire实例是共享单例,因此对于所有请求,cookie都已设置。希望它对你有用。
像这样?
let httpCookie = HTTPCookie.init(properties:
[HTTPCookiePropertyKey.version : "0",
HTTPCookiePropertyKey.name : "MYTestID",
HTTPCookiePropertyKey.value : "983724dd3dea4924b8d675b0df08b611",
HTTPCookiePropertyKey.expires : "2027-05-13 09:21:23 +0000"])
if let cookie = httpCookie {
HTTPCookieStorage.shared.setCookie(cookie)
}
if let fields = response.response?.allHeaderFields as? [String : String]{
let cookies = HTTPCookie.cookies(withResponseHeaderFields: fields, for: (response.request?.url!)!)
HTTPCookieStorage.shared.setCookies(cookies, for: (response.request?.url!)!, mainDocumentURL: nil)
}