如何将 cookie 传递给 NSUrlSession?

Posted

技术标签:

【中文标题】如何将 cookie 传递给 NSUrlSession?【英文标题】:How to pass cookie to NSUrlSession? 【发布时间】:2015-04-06 22:36:12 【问题描述】:

对于 ios,我编写了 NSUrlSession 的自定义委托和实现。它适用于 Http url。但是,当我尝试从经过身份验证且需要传递 Cookie 的 HTTPS 源下载图像资源时,下载失败并显示 NSUrlErrorCode -1013 或 -1002。

 NSMutableUrlRequest req = new NSMutableUrlRequest(new NSUrl(uri.ToString()));
 req.Headers = dictHeaders;//
 NSUrlSessionDownloadTask newTask = session.CreateDownloadTask(req);
 activeDownloads.Add(newTask);
 newTask.Resume();

所以在NSUrlSessionDownloadDelegate 中,我已经实现了DidReceiveChallenge 方法,但目前没有在那里传递任何东西,因为我想从上面的初始登录中传递cookie。

NSUrlSession 对整个应用程序使用共享会话,但我的初始登录 API 是使用 RestSharp.RestClient 完成的,它获取我可以在整个应用程序中使用的 cookie。

所以我的问题是如何将 cookie 传递给 NSUrlSession

【问题讨论】:

【参考方案1】:

据我所知,所有使用 cookie 的工作都经过 NSHTTPCookieStorage 类 https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookieStorage_Class/index.html。您可以使用cookieAcceptPolicy 来配置 cookie 在您的应用程序中的使用方式,甚至在需要时手动添加/删除 cookie。

NSURLSession 将从 NSHTTPCookieStorage 获取 cookie。

【讨论】:

是的,这就是文档所说的,也是我尝试的第一件事,但是我们可以将字符串(标头值)转换为 NSHTTPCookieStorage 对象吗? 您需要填写所有cookie字段,至少,域/名称/值。你到底需要转换什么字符串?

以上是关于如何将 cookie 传递给 NSUrlSession?的主要内容,如果未能解决你的问题,请参考以下文章

将 cookie 传递给 WKWebView / SFSafariViewController?

使用 CSRF_COOKIE_HTTPONLY 将 Django CSRF 令牌传递给 Angular

从我的本机应用程序将 cookie 传递给 SFSafariViewController

如何从 cookie 中保存 XSRF 令牌并将其传递给 Gatling 的下一个请求标头中的服务器

身份验证(cookie+session & jwt验证机制)

如何将 cookie 从 apollo-server 传递到 apollo-clenet