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());
}
}
この方法で、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);
}
かなり遅れましたが、誰かを助けるかもしれません
これを使用してクッキー値を取得できます
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;
}
このリンクを確認してください- HttpURLConnection(Java.net.CookieManager)からWebView(Android.webkit.CookieManager)へCookieを渡す
ウェブビューからCookieを取得する場合は、HttpUrlConnection
からAndroid.webkit.CookieManager
を使用する必要がありますが、Java.net.CookieStore
を使用してCookieを抽出できます
すべてのCookieを取得している文字列を解析する必要があります。
この回答は@ 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
}