【问题标题】:Android cookie manager - How to get all cookiesAndroid cookie 管理器 - 如何获取所有 cookie
【发布时间】:2016-09-17 01:07:59
【问题描述】:

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

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

目前只支持:

  • getCookie(字符串网址)

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

感谢您的任何建议, D

【问题讨论】:

  • 找到解决办法了吗?
  • 也许这个site会帮助你

标签: android cookies android-cookiemanager


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以创建自己的 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)
                        }
                    }
        }
    }
    

    【讨论】:

    • 是否可以拦截第三方cookies?此外,如果无法使用 API CookieStore.getCookies(),它的目的是什么?我真的不明白这个Android设计选择......
    • 这只会为显式加载的 url 保存 cookie,不会实际处理后台加载的资源。我会尽快发布更好的方法。
    • 更好的方法是使用shouldInterceptRequest() 回调来拦截所有HTTP 请求并在自己处理请求时提取cookie。我试图写一个工作示例,但是因为WebResourceRequestWebResourceResponse 接口很奇怪,并且需要一些修补才能与HttpUrlConnection 甚至OkHttpClient 互操作,所以我惨遭失败。希望您对这个想法有更多的运气。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2020-01-02
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多