Android cookie manager - 如何获取所有cookie

时间:2016-09-17 01:07:59

标签: android cookies android-cookiemanager

我需要获取存储在webview中的所有cookie。目前是默认的webview。

https://developer.android.com/reference/android/webkit/CookieManager.html

目前它只支持:

  • getCookie(String url)

我需要能够在不知道确切域名的情况下获取所有cookie。

任何建议表示感谢, d

3 个答案:

答案 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 */);