Менеджер файлов cookie Android — как получить все файлы cookie

Мне нужно получить все файлы cookie, которые хранятся в веб-просмотре. В настоящее время веб-просмотр по умолчанию.

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

В настоящее время он поддерживает только:

  • getCookie (URL-адрес строки)

Мне нужна возможность получить все файлы cookie, не зная точного имени домена.

Любые советы приветствуются Спасибо, D


person darewreck    schedule 17.09.2016    source источник
comment
Вы нашли решение?   -  person asdjfiasd    schedule 28.10.2019
comment
возможно, этот сайт поможет вам   -  person Faiz Azhar Ristya Nugraha    schedule 17.12.2020


Ответы (2)


Вы можете создать собственное хранилище файлов cookie и перехватывать файлы cookie, загруженные WebView. Пример использования 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)
                    }
                }
    }
}
person SpaceBison    schedule 24.07.2018
comment
Можно ли при этом также перехватывать сторонние файлы cookie? Кроме того, для чего нужен API CookieStore.getCookies(), если его невозможно использовать? Я действительно не понимаю этот выбор дизайна Android... - person toioski; 25.07.2018
comment
Это сохранит файлы cookie только для явно загруженных URL-адресов, никакие ресурсы, загруженные в фоновом режиме, фактически не будут обрабатываться. Я постараюсь опубликовать лучший подход в ближайшее время. - person SpaceBison; 30.07.2018
comment
Лучшим подходом было бы использование обратных вызовов shouldInterceptRequest() для перехвата всех HTTP-запросов и извлечения файлов cookie при самостоятельной обработке запросов. Я попытался написать работающий пример, но поскольку интерфейсы WebResourceRequest и WebResourceResponse странные и требуют некоторой доработки для взаимодействия с HttpUrlConnection или даже OkHttpClient, я с треском провалился. Надеюсь, вам повезет больше с этой идеей. ;) - person SpaceBison; 30.07.2018

В Java, как я понял, вы используете webView и хотите получить все файлы cookie определенного предварительного URL-адреса, вы можете получить текущий URL-адрес от клиента webView и передать его в качестве параметра для 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 */);
person mohamed morsi    schedule 18.07.2020