Android HttpClient и Cookies

У меня проблема с HttpClient в Android: используя следующий код, я хочу использовать файлы cookie, которые уже установлены ранее, войдя через веб-просмотр. Таким образом, данные для входа должны быть там и действительно есть, я его протестировал. Но когда я использую файлы cookie в httppost или httpget, он не использует данные для входа. Но эти файлы cookie на самом деле должны быть достаточными для получения той страницы, для которой необходим логин, не так ли? Я не уверен, что мне нужно отправить файлы 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); 

И если я запустил код, я получаю только страницу входа на этот сайт, поэтому он не принял cookie.

Благодарим за помощь заранее

Приветствия, timo

Solutions Collecting From Web of "Android HttpClient и Cookies"

У меня была та же проблема, и я использовал подобный подход, как в вопросе, не повезло. То, что заставило его работать для меня, – это добавить домен для каждого скопированного файла cookie. (BasicClientCookie cookie.setDomain (String))

Моя функция использования:

 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, которые не соответствуют текущему сеансу. Это может работать, если идентификатор сеанса находится в файле cookie, и вы можете войти в один и тот же сеанс, но вам действительно нужно точно знать, что делает сервер.

Если у вас все еще есть эта проблема, будьте осторожны с данными кукисами, некоторые могут быть искажены, проверьте эти два сайта:

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

Это помогло мне: заголовок «Set-Cookie»