Android HttpClient和Cookies

我在Android中的HttpClient有一个问题:通过使用下面的代码,我想通过webviewlogin使用之前已经设置的cookie。 所以login数据应该在那里,确实在那里,我testing了它。 但是,当我在httppost或httpget中使用cookie时,它不使用login数据。 但这些cookies实际上应该足以接收那个需要login的页面,不是吗? 我不确定是否需要以特殊的方式将cookie发送到服务器或者是否足以将其加载到httpcontext中。 这里是代码:

DefaultHttpClient httpclient = new DefaultHttpClient(); CookieStore lCS = new BasicCookieStore(); if (CookieManager.getInstance().getCookie(pUrl) != null) { String cookieString = CookieManager.getInstance().getCookie(pUrl); String[] urlCookieArray = cookieString.split(";"); for (int i = 0; i < urlCookieArray.length; i++) { System.out.println(urlCookieArray[i]); String[] singleCookie = urlCookieArray[i].split("="); Cookie urlCookie = new BasicClientCookie(singleCookie[0], singleCookie[1]); lCS.addCookie(urlCookie); } } HttpContext localContext = new BasicHttpContext(); httpclient.setCookieStore(lCS); localContext.setAttribute(ClientContext.COOKIE_STORE, lCS); HttpPost httppost = new HttpPost(pUrl); // get the url connection try { StringBuilder sb = new StringBuilder(); HttpResponse response = httpclient.execute(httppost, localContext); InputStream is = response.getEntity().getContent(); InputStreamReader isr = new InputStreamReader(is); 

如果我运行的代码,我只收到该网站的login页面,所以它不接受cookie。

提前感谢您的帮助

问候,蒂莫

Solutions Collecting From Web of "Android HttpClient和Cookies"

我有同样的问题,我使用了类似的方法,在没有运气的问题。 为我工作的事情是为每个复制的cookie添加域。 (BasicClientCookie cookie.setDomain(String))

我的实用function:

 public static BasicCookieStore getCookieStore(String cookies, String domain) { String[] cookieValues = cookies.split(";"); BasicCookieStore cs = new BasicCookieStore(); BasicClientCookie cookie; for (int i = 0; i < cookieValues.length; i++) { String[] split = cookieValues[i].split("="); if (split.length == 2) cookie = new BasicClientCookie(split[0], split[1]); else cookie = new BasicClientCookie(split[0], null); cookie.setDomain(domain); cs.addCookie(cookie); } return cs; } String cookies = CookieManager.getInstance().getCookie(url); BasicCookieStore lCS = getCookieStore(cookies, MyApp.sDomain); HttpContext localContext = new BasicHttpContext(); DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.setCookieStore(lCS); localContext.setAttribute(ClientContext.COOKIE_STORE, lCS); ... 

看来你是正确的复制cookie,一般你不需要做任何特别的HttpClient发送cookie。 但是,其中一些可能会绑定到一个会话,并且当您使用HttpClient打开一个新的连接时,您将打开一个新的会话。 服务器可能会忽略与当前会话不匹配的Cookie。 如果会话ID在Cookie中并且您能够进入同一个会话,这可能会有效,但是您确实需要确切地知道服务器在做什么。

如果你仍然有这个问题,小心给定的cookies,有些可能是畸形的,检查这两个网站:

http://www.codeproject.com/Articles/3106/On-The-Care-and-Handling-of-Cookies

这一个帮助我: 获取“Set-Cookie”标题