在 webview 中登录后提取 Android cookie

我有一个应用程序,打开一个网址在一个 webview,用户必须然后登录到一个网站通过 webview 和收到一个 cookie 一旦登录。我在登录后得到 cookie 时遇到了问题。

问题是,我可以使用 android.webkit. CookieManager 实现这一点,并将所有 cookie 输出到一个字符串中。

但是,我想使用 cookie 存储来实现它(就像 java.net 中那样)。CookieStore)所以我需要使用 java.net。Cookie Manager.

我在 WebViewClient 的 onPageFinish ()中使用以下代码。我知道问题在于打开一个新的连接,我需要从当前页面获取内容。我很感激你的帮助,谢谢

        @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());
}
}
89394 次浏览

您可以通过这种方式从 webview 中提取所有 cookies 当前的 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);
}

检查这个链接- 将 cookie 从 HttpURLConnection (java.net. CookieManager)传递到 WebView (android.webkit. CookieManager)

如果你想从 webview 获得 cookie,你必须使用 android.webkit.CookieManager,从任何 HttpUrlConnection,但是,你可以提取 Cookie 使用 java.net.CookieStore

您需要解析获取所有 cookie 的字符串。

虽然很晚了,但也许能帮到别人

您可以使用这个函数获取 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;
}

这个答案是从@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
}

可以使用此函数获取特定的 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]
}