Sharing cookies/session from WebView to HttpClient doesn't work

Posted by Toni Kanoni on Stack Overflow See other posts from Stack Overflow or by Toni Kanoni
Published on 2012-08-29T21:35:33Z Indexed on 2012/08/29 21:38 UTC
Read the original article Hit count: 598

Filed under:
|
|
|
|

I know this question has been asked a hundred times, and I've read and tried for 2 hours now, but I can't find my error :-(

I am trying to create a simple webbrowser and therefore have a webview, where I login on a site and get access to a picture area. With help of a DefaultHttpClient, I want to make it possible to download pictures in the secured area. Therefore I am trying to share the cookies from the webview and pass them on to the HttpClient, so that it is authenticated and able to download. But whatever I try and do, I always get a 403 response back...

Basically the steps are the following:

1) Enter URL, webview loads website

2) Enter login details in a form

3) Navigate to picture and long hold for context menu

4) Retrieve the image URL and pass it on to AsynTask for downloading

Here's the code of the AsyncTask with the Cookie stuff:

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)

--> NEVER Happens, always get 403

.) One of the problems is that the webview saves some cookies for the host *www.*example.com, but the image-URL to download (params[0]) is *static.*example.com. The line cookieManager.getCookie(new URL(params[0]).getHost()); returns null, because there is no cookie for static.example.com, but only for www.example.com.

.) When I manually say cookieManager.getCookie("www.example.com"); I get some cookies back, which I add to the HttpClient cookie store: There are 5 cookies added - testcookie = 0 - PHPSESSID = 320947238someGibberishSessionId - email = [email protected] - pass = 32423te32someEncodedPassGibberish - user = 345542

So although these cookies, a session ID and other stuff, get added to the HttpClient, it never get's through to download an image. Im totally lost... though I guess that it either has something to do with the cookies domains, or that Im still missing other cookies.

But from where the heck should I know which cookies exist in the webview, when I have to specify a specific URL to get a cookie back?? :-(

Any advice?

© Stack Overflow or respective owner

Related posts about android

Related posts about cookies