70

WebビューでURLを開くアプリケーションがあります。ユーザーは、Webビューを介してサイトにログインし、ログインすると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());
            }
        }
4

5 に答える 5

107

この方法で、すべてのCookieの現在のURLを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);
}
于 2013-04-04T04:52:48.287 に答える
34

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

これを使用してCookie値を取得できます

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; 
}
于 2013-11-27T12:01:07.440 に答える
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
}
于 2019-05-09T21:45:00.420 に答える
1

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

WebビューからCookieを取得する場合は、を使用する必要がありますが、を使用してandroid.webkit.CookieManagerCookieHttpUrlConnectionを抽出できます。java.net.CookieStore

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

于 2013-07-26T07:39:40.350 に答える
0

この関数を使用して、特定の情報を取得できますcookie

fun getCookie(name: String): String? {
    val cookies = cookieManager.getCookie("YOUR_URL_HERE")
    if (cookies == null || !cookies.contains("${name}=")) {
        return null
    }
    return cookies.split("${name}=")[1].split(";")[0]
}
于 2021-12-24T08:10:53.670 に答える