2015-01-14 21 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();