使用共享的 WKWebView Cookie 进行请求
Use shared WKWebViewCookies for a request
我的项目中有几个不同的 WKWebView,它们都通过单个 WKProcessPool 共享 cookie。
现在我想在 REST API 上发出请求,并且需要将 cookie 从那个 WKWebView 准确地发送到那个 API。有没有办法得到饼干?我得到的一切都是来自 NSHTTPCookieStorage
的 cookie,但它们似乎与我在 WKWebView 中使用的 cookie 并不真正同步。或者甚至有可能发出使用 WKProcessPool 的请求吗?
1) 如果您的 cookie 不是仅限 HTTP,您可以通过在 webView
上评估 JavaScript 命令 document.cookie
来获取它们并将它们用于您的请求。
如果它们是 HTTP-only,似乎没有可行的方法来执行此操作。
据我所知,没有记录在 WKWebView
和 NSURLSession
之间同步 cookie 的方法。
2) 另一种方法(如果 cookie 属于 REST API 所属的同一域)- 使用相同的进程池创建 "background" webView
并对 REST [=42] 执行所有操作=] 通过此实例 - 将自动添加 cookie(甚至仅 HTTP):
您可以设置任何参数(method/body/headers/etc)来请求和加载
通过 loadRequest:
;如果你的 REST API returns JSON,你可以使用 JavaScript 命令
document.body
得到它;
获取响应代码有点困难 - 您需要实施
webView:decidePolicyForNavigationResponse:
的方法
WKNavigationDelegate
和 赶上
它.
此外,您需要记住,您只能执行 1 个请求
同时在 webView
中。所以,你可能需要创建一些队列
将一个接一个执行的请求数。
我的项目中有几个不同的 WKWebView,它们都通过单个 WKProcessPool 共享 cookie。
现在我想在 REST API 上发出请求,并且需要将 cookie 从那个 WKWebView 准确地发送到那个 API。有没有办法得到饼干?我得到的一切都是来自 NSHTTPCookieStorage
的 cookie,但它们似乎与我在 WKWebView 中使用的 cookie 并不真正同步。或者甚至有可能发出使用 WKProcessPool 的请求吗?
1) 如果您的 cookie 不是仅限 HTTP,您可以通过在 webView
上评估 JavaScript 命令 document.cookie
来获取它们并将它们用于您的请求。
如果它们是 HTTP-only,似乎没有可行的方法来执行此操作。
据我所知,没有记录在 WKWebView
和 NSURLSession
之间同步 cookie 的方法。
2) 另一种方法(如果 cookie 属于 REST API 所属的同一域)- 使用相同的进程池创建 "background" webView
并对 REST [=42] 执行所有操作=] 通过此实例 - 将自动添加 cookie(甚至仅 HTTP):
您可以设置任何参数(method/body/headers/etc)来请求和加载 通过
loadRequest:
;如果你的 REST API returns JSON,你可以使用 JavaScript 命令document.body
得到它;获取响应代码有点困难 - 您需要实施
webView:decidePolicyForNavigationResponse:
的方法WKNavigationDelegate
和 赶上 它.此外,您需要记住,您只能执行 1 个请求 同时在
webView
中。所以,你可能需要创建一些队列 将一个接一个执行的请求数。