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?