Ben*_*ded 2 cookies android webview http-request
我有这个场景,我的应用程序在 webView 中显示了一个 2 页的登录过程。
第一页仅询问您计划连接到哪个域。第二页要求提供凭据。
我正在尝试在 webView 中执行登录,然后从我的本机代码执行请求。我意识到我需要从 webView 获取存储的 cookie(但是从哪个 url?从第一页还是第二页?),然后将 cookie 用于本机代码请求。
有人可以告诉我该怎么做吗?登录过程很简单——用户通过 webview 登录——很好。现在,我知道如何使用 cookie 管理,但我不知道我应该寻找哪个 cookie - 它是第一个登录页面的 url 吗?是第二个吗?有关系吗?
接下来,如何使用 cookie 将 GET 请求发送回服务器,以便服务器知道我已通过身份验证?
我很感激我一无所知并寻求帮助的答案:)
我做了与您相反的事情:我使用 loopj Android 异步 Http 客户端登录,并希望会话 cookie 应用于同一个网站的 webview。我不知道它是否会对您有所帮助,但是,我将发布用于复制 cookie 的代码。也许看到这个过程会帮助你寻找你需要的项目......将 cookie 从 webview 复制到 HTTP。我无法提供进一步的帮助,因为我是 Android 新手。(当然,我从其他人的帖子中改编了我的代码。)
类变量声明:
private AsyncHttpClient loopjClient = new AsyncHttpClient();
private PersistentCookieStore myCookieStore;
Run Code Online (Sandbox Code Playgroud)
onCreate() 初始化:
myCookieStore = new PersistentCookieStore(this);
loopjClient.setCookieStore(myCookieStore);
Run Code Online (Sandbox Code Playgroud)
HTTP登录后:
// get cookies from the generic http session, and copy them to the webview
CookieSyncManager.createInstance(getActivity().getApplicationContext());
CookieManager.getInstance().removeAllCookie();
CookieManager cookieManager = CookieManager.getInstance();
List<Cookie> cookies = myCookieStore.getCookies();
for (Cookie eachCookie : cookies) {
String cookieString = eachCookie.getName() + "=" + eachCookie.getValue();
cookieManager.setCookie("http://www.example.com", cookieString);
//System.err.println(">>>>> " + "cookie: " + cookieString);
}
CookieSyncManager.getInstance().sync();
// holy ****, it worked; I am automatically logged in for the webview session
Run Code Online (Sandbox Code Playgroud)
请注意,loopj 就像 webview,因为所有 cookie 管理和发送都是自动的。我只是复制域的所有 cookie。我想你会没事的,做同样的事情......因此,不用担心是从第一页还是第二页。
由于接受的答案并没有真正描述它是如何完成的:
将这些行放在你的应用程序开始的地方:
CookieHandler.setDefault(new CookieManager()); // Apparently for some folks this line works already, for me on Android 17 it does not.
CookieSyncManager.createInstance(yourContext); // or app will crash when requesting cookie
Run Code Online (Sandbox Code Playgroud)
然后在您的连接中:
String cookies = CookieManager.getInstance().getCookie(urlString);
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
// conn.setRequestMethod("GET");
// conn.setDoInput(true);
if (cookies != null)
conn.setRequestProperty("Cookie", cookies);
// Starts the query
conn.connect();
Run Code Online (Sandbox Code Playgroud)