我知道這個問題已經被問了一百次,我讀過,現在嘗試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回? :-(
有什麼建議?