2012-08-29 87 views
1

我知道這個問題已經被問了一百次,我讀過,現在嘗試2小時,但我無法找到我的錯誤:-(共享餅乾/從的WebView會話的HttpClient不起作用

我試圖創建一個簡單的網頁瀏覽器,因此有一個web視圖,在我的網站上登錄並訪問一個畫面區域。隨着DefaultHttpClient的幫助下,我想使它可以下載圖片在安全區域。 因此,我想從web視圖共享餅乾和它們傳遞給HttpClient的,所以它被認證並能夠進行下載。但無論我嘗試這樣做,我總是得到一個403響應回來...

基本上步驟如下:

1)輸入網址,網頁視圖加載的形式

3)導航網站

2)輸入登錄信息的圖片和長期持有的上下文菜單

4 )檢索圖像URL,並把它傳遞給AsynTask下載

這裏是的AsyncTask與Cookie的東西代碼:

protected String doInBackground(String... params) { 

//params[0] is the URL of the image 

      try 
      { 

       CookieManager cookieManager = CookieManager.getInstance(); 

       String c = cookieManager.getCookie(new URL(params[0]).getHost());    

       BasicCookieStore cookieStore = new BasicCookieStore(); 
       BasicHttpContext localContext = new BasicHttpContext(); 
       localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); 
       String[] cookieParts = null; 
       String cookies[] = null; 

       cookies = c.split(";"); 

       for(int i=0;i<cookies.length;i++) 
       {     
        cookieParts = cookies[i].split("="); 
        BasicClientCookie sessionCookie = new BasicClientCookie(cookieParts[0].trim(), cookieParts[1].trim()); 
        sessionCookie.setDomain(new URL(params[0]).getHost()); 

        cookieStore.addCookie(sessionCookie);     
       } 


       DefaultHttpClient httpClient = new DefaultHttpClient(); 

       httpClient.setCookieStore(cookieStore); 

       HttpGet pageGet = new HttpGet(new URL(params[0]).toURI()); 


       HttpResponse response = httpClient.execute(pageGet, localContext); 
       if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) 

- >從未發生過,總是得到403

)其中的一個問題是,網頁流量節省一些餅乾主機* WWW。 * example.com,但要下載的圖像URL(params [0])是* static。 * example.com。該行 cookieManager.getCookie(new URL(params[0]).getHost()); 返回null,因爲沒有用於static.example.com的cookie,但僅用於www.example.com。 )當我手動說cookieManager.getCookie(「www.example.com」);我得到了一些餅乾回來,這是我加入到HttpClient的cookie存儲: 有5塊餅乾加入 - testcookie = 0 - PHPSESSID = 320947238someGibberishSessionId - 電子郵件= [email protected] - 通= 32423te32someEncodedPassGibberish - 用戶= 345542

因此,儘管這些cookie,會話ID和其他的東西,被添加到HttpClient的,它從來沒有得到的通過下載一個圖像。我完全失去了......雖然我猜它或者與cookies域有關,或者我仍然錯過了其他的cookie。

但是從那裏到底我應該知道哪些cookies在web視圖存在,當我必須指定一個特定的URL來獲得一個cookie回? :-(

有什麼建議?

回答

0

你可能想出答案已經怎麼把它是一個相當晚的答案。但是,萬一......

試試這個。當你檢索Cookie的WebView只是在域名中使用example.com。當您在BasicClientCookie設置cookie並設置域名,設置域名.example.com,注意「」在開始的時候。現在,我認爲會議應該在所有子域的工作,你的應用。

1

我想我們已經在上面的代碼片段中使它變得太複雜了。 使用這些簡單的步驟 -

1)檢索webView的餅乾-wherever網頁視圖是,使用此代碼重新

String cookie = CookieManager.getInstance().getCookie(
         url.toString()); 
       Log.d("mytcs", "cookie downloadlistner " + cookie); 

2)使用PARAMS您下載的AsyncTask通過這 -

downloadImageTask = new DownloadImage(); 
        downloadPDFTask.execute(url, cookie); 

(我假定你知道要檢索的AsyncTask這個cookie,你將使用PARAMS [],

3)一套使用這個cookie在您的HTTP請求 -

if (cookie != null) 
    con.setRequestProperty("cookie", cookie); 

其中con是HttpURLConnection con;

這樣你就可以將其設置爲你的需要,在HttpGet