2015-01-14 20 views
1

我有这个场景,我的应用在webView中显示一个2页的登录过程。使用来自webview的cookie执行HTTP请求

第一页只询问您计划连接到哪个域。 第二页要求输入凭证。

我想在webView中执行登录,然后从我的本机代码执行请求。 我知道我需要从webView中获取存储的cookie(但是从第一页或第二页?),然后使用cookie作为本地代码请求。

有人可以告诉我该怎么做吗?登录过程很简单 - 用户通过webview登录 - 很好。现在,我知道如何使用cookie管理,但我不知道我想找哪个cookie--它是第一个登录页面的网址吗?它是第二个吗?有关系吗?

接下来,如何使用cookie通过GET请求发送回服务器,以便服务器知道我已通过身份验证?

我很欣赏的答案,我无言以对,并乞求帮助:)

回答

0

最后,我找到了我的路,而且非常简单。

用户通过webview登录后 - 在设备上设置cookie。 稍后,我想对服务执行Native api调用时,我会向Cookie管理器询问基于url设置的cookie。

然后我拿出用于在服务器上进行身份验证的重要头文件,并将其与我的api调用一起发送。

+0

这工作,我不知道为什么相反不起作用! – User3

3

我已经做了你的相反:我登录与循环J Android的异步HTTP客户端,并希望会话cookie应用到网页视图,为同一个网站。我不知道它是否会帮助你,但是,我将发布我的代码以便复制Cookie。也许看到这个过程将帮助你寻找你需要的项目......将cookies从webview复制到HTTP。我无法提供进一步的帮助,因为我在Android上相当新颖。 (当然,我改编自别人的帖子我的代码。)

类变量声明:

private AsyncHttpClient loopjClient = new AsyncHttpClient(); 
private PersistentCookieStore myCookieStore; 

的onCreate()初始化:

myCookieStore = new PersistentCookieStore(this); 
loopjClient.setCookieStore(myCookieStore); 

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 

请注意,loopj就像webview,因为所有的cookie管理和发送都是自动的。我只是复制域的所有cookie。我认为你会没事的,也一样......因此,不管是从第一页还是第二页开始。

+0

尼斯!有用。 – Nitish

+0

你救了我! <3 –

3

由于接受的答案并不能真正说明它是如何做:

把这些线路的地方在那里你的应用程序启动:

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 

,然后在连接:

 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();