【发布时间】:2014-12-19 15:38:10
【问题描述】:
我正在尝试让我的 Alamofire 管理器实例自动记住并设置 cookie,这是我不成功的尝试:
let cfg = NSURLSessionConfiguration.defaultSessionConfiguration()
let cooks = NSHTTPCookieStorage.sharedHTTPCookieStorage()
// makes no difference whether it's set or left at default
cfg.HTTPCookieStorage = cooks
cfg.HTTPCookieAcceptPolicy = NSHTTPCookieAcceptPolicy.Always
let mgr = Alamofire.Manager(configuration: cfg)
mgr.request(NSURLRequest(URL: NSURL(string: "http://httpbin.org/cookies/set?stack=overflow"))).responseString {
(_, _, response, _) in
var resp = response // { "cookies": { "stack": "overflow" } }
// becomes empty if cfg.HTTPCookieStorage set to nil
}
mgr.request(NSURLRequest(URL: NSURL(string: "http://httpbin.org/cookies"))).responseString {
(_, _, response, _) in
var resp = response // { "cookies": {} }
// always empty no matter what
}
cooks.cookiesForURL(NSURL(string: "http://httpbin.org/cookies")) // 0 elements
第一个 URL 发送一个 Set-Cookie : stack=overflow; Path=/ 标头,然后重定向 (302) 到 /cookies(相当于第二个 URL);这在我的浏览器中运行良好(一旦我点击第一个 URL,第二个 URL 总是显示该 cookie)所以我想用 Alamofire 复制这种行为。
【问题讨论】:
-
您是否尝试使用
HTTPAdditionalHeaders自己提供cookie 并在NSURLSessionConfiguration中添加Cookie 标头? -
@Pintouch 我相信这会起作用,但我想使用现有的 cookie 存储功能,而不是跟踪 cookie 并手动设置标题。
-
是的,我明白了,但是您的代码对我来说看起来不错。尝试在 AlamoFire GitHub 上打开一个问题
-
@Pintouch 问题解决了;看看下面的答案。这只是我的一个愚蠢的错误,没有意识到 Alamofire 方法是异步的。