Получить куки из веб-просмотра с путем и сроком годности

В настоящее время у меня есть веб-просмотр, который получает куки в onPageFinished

mWebview = (WebView) this.findViewById(R.id.myWebView);

    mWebview.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            String cookies = CookieManager.getInstance().getCookie(url);
            Log.d("Cookie", cookies);
        }
    });

    mWebview.loadUrl("http://www.google.com");

CookieManager.getCookie () возвращает только пары имени и значения файла cookie.

Теперь я хотел бы получить больше информации об этом файле cookie, например, путь и т.д.

Любая идея, как я могу извлечь все "необработанные данные" куки?

2 ответа

Решение

Вам необходимо переопределить загрузку ресурсов WebView, чтобы получить доступ к заголовкам ответов (файлы cookie отправляются в виде заголовков http). В зависимости от версии Android, которую вы поддерживаете, вам необходимо переопределить следующие два метода WebViewClient:

mWebview.setWebViewClient(new WebViewClient() {

            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
                if (request != null && request.getUrl() != null && request.getMethod().equalsIgnoreCase("get")) {
                    String scheme = request.getUrl().getScheme().trim();
                    if (scheme.equalsIgnoreCase("http") || scheme.equalsIgnoreCase("https")) {
                        return executeRequest(request.getUrl().toString());
                    }
                }
                return null;
            }

            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
                if (url != null) {
                    return executeRequest(url);
                }
                return null;
            }
        });

Затем вы можете извлечь содержимое URL-адреса самостоятельно и передать его в WebView (создав новый WebResourceResponse) или вернуть значение null и позволить WebView его обработать (учитывая, что это делает еще один вызов сети!)

private WebResourceResponse executeRequest(String url) {
        try {
            URLConnection connection = new URL(url).openConnection();
            String cookie  = connection.getHeaderField("Set-Cookie");
            if(cookie != null) {
                Log.d("Cookie", cookie);
            }
            return null;
            //return new WebResourceResponse(connection.getContentType(), connection.getHeaderField("encoding"), connection.getInputStream());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

Попробуй это:

String[] x = Pattern.compile(";").split(CookieManager.getInstance().getCookie());

/questions/13055161/android-chitaet-kuki/13055170#13055170

Другие вопросы по тегам