安卓Cookie管理器 - 如何获取所有Cookie

23

你找到解决方案了吗? - asdjfiasd
也许这个网站可以帮助你。 - Faiz Azhar Ristya Nugraha
2个回答

2
在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 */);

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)
                    }
                }
    }
}

2
使用这个方法是否可以拦截第三方cookie?此外,如果无法使用CookieStore.getCookies() API,那么它的目的是什么?我真的不理解这个Android设计选择... - toioski
这将仅为明确加载的URL保存Cookie,不会处理后台加载的任何资源。我会尽快尝试发布更好的方法。 - SpaceBison
一个更好的方法是使用 shouldInterceptRequest() 回调来拦截所有 HTTP 请求并在处理请求时提取 cookies。我尝试编写了一个可行的示例,但由于 WebResourceRequestWebResourceResponse 接口比较奇怪,需要一些调整才能与 HttpUrlConnection 或甚至 OkHttpClient 互操作,所以我失败了。希望你能运用这个想法更加成功。 ;) - SpaceBison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接