web-dev-qa-db-fra.com

Android - extraire les cookies après la connexion dans la vue Web

J'ai une application qui ouvre une URL dans une vue Web, l'utilisateur doit ensuite se connecter à un site via la vue Web et reçoit un cookie une fois connecté. J'ai des problèmes pour obtenir des cookies après la connexion.

Le problème est que je peux y parvenir en utilisant Android.webkit.CookieManager et générer tous les cookies dans une seule chaîne.

Cependant, je veux y parvenir en utilisant un magasin de cookies (comme dans Java.net.CookieStore), donc je dois utiliser Java.net.CookieManager.

J'utilise le code suivant dans le onPageFinished () d'un WebViewClient. Je sais que le problème réside dans l'ouverture d'une nouvelle connexion, où j'ai besoin d'obtenir le contenu de la page actuelle. J'apprécierais de l'aide, merci

        @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());
            }
        }
51
elgoog

Vous pouvez extraire tous les cookies de l'url actuelle de cette manière à partir de la vue Web sous forme de chaîne:

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

C'était assez tard, mais ça pourrait aider quelqu'un

vous pouvez obtenir la valeur du cookie en utilisant ce

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

Déclarez la fonction comme

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; 
}
25
vimal1083

Vérifiez ce lien - passez les cookies de HttpURLConnection (Java.net.CookieManager) à WebView (Android.webkit.CookieManager)

Si vous souhaitez obtenir des cookies de WebView, vous devrez utiliser Android.webkit.CookieManager, à partir de n'importe quel HttpUrlConnection, cependant, vous pouvez extraire les cookies en utilisant Java.net.CookieStore

Vous devrez analyser la chaîne où vous obtenez tous les cookies.

1
Darpan

Cette réponse est dérivée de @ vimal1083. Il renvoie les valeurs dans un Map, et bien sûr écrit dans 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
}
0
Juan Mendez