我需要获取存储在webview中的所有cookie。目前是默认的webview。
https://developer.android.com/reference/android/webkit/CookieManager.html
目前它只支持:
我需要能够在不知道确切域名的情况下获取所有cookie。
任何建议表示感谢, d
答案 0 :(得分:0)
您可以创建自己的cookie存储并拦截由WebView加载的cookie。使用java.net.CookieManager
作为存储的示例:
val cookieManager = java.net.CookieManager()
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
CookieManager.getInstance()
.getCookie(url)
?.let {
val uri = URI(url)
HttpCookie.parse(it).forEach {
cookieManager.cookieStore.add(uri, it)
}
}
}
}
答案 1 :(得分:0)
要执行您想做的事情,您需要直接使用Cookie Manager,现在就不用担心Web View了。像这样获得所有cookie:
List<HttpCookie> cookies = ((CookieManager) CookieManager.getDefault()).getCookieStore().getCookies();
for (HttpCookie cook : cookies) {
Log.i("COOKIE", cook.toString());
}
但是,要小心,因为可能没有默认存储-如果是这种情况,那么您想要做的就是在应用程序首次启动时(使用任何Web视图之前)设置默认存储
if (CookieManager.getDefault() == null) {
CookieHandler.setDefault(new CookieManager());
}
要注意的另一件事是,如果您没有看到期望的所有cookie,请确保启用了第三方cookie
CookieManager.getDefault().setAcceptThirdPartyCookies(mWebView,true);
答案 2 :(得分:0)
在Java中,据我了解您正在使用webView,并且想要获取所有特定预览URL的cookie,您可以从webView客户端获取当前URL,并将其作为参数传递给getCookie()
String cookies = CookieManager.getInstance().getCookie(webView.getUrl());
最佳做法是,您应在页面加载后像这样尝试
WebView webView = findViewById(R.id.webview_id);
WebViewClient webViewClient = new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
String cookies = CookieManager.getInstance().getCookie(view.getUrl());
// save cookies or call new fun to handle actions
// newCookies(cookies);
}
};
webView.setWebViewClient(webViewClient);
//webView.loadUrl(/*what ever url you want to load */);