web-dev-qa-db-ja.com

Android-webviewでのログイン後のCookieの抽出

WebViewでURLを開くアプリケーションがあり、ユーザーはWebViewからサイトにログインし、ログイン後にCookieを受信する必要があります。ログイン後にCookieを取得するのに問題があります。

問題は、Android.webkit.CookieManagerを使用してこれを達成し、すべてのCookieを単一の文字列で出力できることです。

ただし、(Java.net.CookieStoreのように)Cookieストアを使用してそれを実現したいので、Java.net.CookieManagerを使用する必要があります。

WebViewClientのonPageFinished()内で次のコードを使用しています。現在のページからコンテンツを取得する必要がある新しい接続を開くことに問題があることを知っています。助けてくれてありがとう、ありがとう

        @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

この方法で、webviewから文字列としてすべてのCookieの現在のURLを抽出できます。

@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

かなり遅れましたが、誰かを助けるかもしれません

これを使用してクッキー値を取得できます

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

このリンクを確認してください- HttpURLConnection(Java.net.CookieManager)からWebView(Android.webkit.CookieManager)へCookieを渡す

ウェブビューからCookieを取得する場合は、HttpUrlConnectionからAndroid.webkit.CookieManagerを使用する必要がありますが、Java.net.CookieStoreを使用してCookieを抽出できます

すべてのCookieを取得している文字列を解析する必要があります。

1
Darpan

この回答は@ 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
}
0
Juan Mendez