Подтвердить что ты не робот

Android - извлечение файлов cookie после входа в webview

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

Проблема в том, что я могу добиться этого с помощью android.webkit.CookieManager и вывести все файлы cookie в одну строку.

Однако я хочу достичь этого, используя хранилище cookie (как в java.net.CookieStore), поэтому мне нужно использовать java.net.CookieManager.

Я использую следующий код внутри onPageFinished() WebViewClient. Я знаю, что проблема заключается в открытии нового соединения, где мне нужно получать контент с текущей страницы. Я был бы признателен за помощь, спасибо

        @Override
        public void onPageFinished(WebView view, String url){

            Log.d(TAG, "Finished loading: " + url);

            CookieSyncManager syncManager = CookieSyncManager.createInstance(Main.this);
            syncManager.sync();

            CookieManager manager = new CookieManager();
            manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
            CookieHandler.setDefault(manager);

            try {
                URL blah = new URL(url);
                HttpURLConnection con = (HttpURLConnection) blah.openConnection();
                readStream(con.getInputStream()); // outputting html
            } 
            catch (Exception e) {
            }

            CookieStore cookieJar = manager.getCookieStore();
            List<HttpCookie> cookies = cookieJar.getCookies();

            for (HttpCookie cookie: cookies) {
                Log.d(TAG, "cookie name : "+cookie.getName().toString());
            }
        }
4b9b3361

Ответ 1

Вы можете извлечь весь текущий URL-адрес cookie из webview в виде строки:

@Override
public void onPageFinished(WebView view, String url){
    String cookies = CookieManager.getInstance().getCookie(url);
    Log.d(TAG, "All the cookies in a string:" + cookies);
}

Ответ 2

Было довольно поздно, но это может кому-то помочь

Вы можете получить значение куки, используя это

getCookie("http://www.example.com","cookieName");

Объявите функцию как

public String getCookie(String siteName,String cookieName){     
    String CookieValue = null;

    CookieManager cookieManager = CookieManager.getInstance();
    String cookies = cookieManager.getCookie(siteName);       
    String[] temp=cookies.split(";");
    for (String ar1 : temp ){
        if(ar1.contains(cookieName)){
            String[] temp1=ar1.split("=");
            CookieValue = temp1[1];
            break;
        }
    }              
    return CookieValue; 
}

Ответ 3

Проверьте эту ссылку - Передача файлов cookie из HttpURLConnection (java.net.CookieManager) в WebView (android.webkit.CookieManager)

Если вы хотите получать файлы cookie из webview, вам нужно будет использовать android.webkit.CookieManager, из любого HttpUrlConnection, однако вы можете извлечь файлы cookie, используя java.net.CookieStore

Вам нужно будет разобрать строку, в которой вы получаете все файлы cookie.

Ответ 4

Этот ответ получен от @vimal1083. Возвращает значения в Map и, конечно, написано в Kotlin.

fun getCookieMap(siteName: String): Map<String,String> {

    val manager = CookieManager.getInstance()
    val map = mutableMapOf<String,String>()

    manager.getCookie(siteName)?.let {cookies ->
        val typedArray = cookies.split(";".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
        for (element in typedArray) {
            val split = element.split("=".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()

            if(split.size >= 2) {
                map[split[0]] = split[1]
            } else if(split.size == 1) {
                map[split[0]] = ""
            }
        }
    }

    return map
}