2013-02-19 6 views
3

У меня возникли проблемы с получением подлинности с моим сервером.Android: использование файлов cookie в HTTP. Запрос на отправку

Это работает, когда я вручную пытаюсь установить файлы cookie через плагин Google, такой как почтальон, но не работает, когда это делается через устройство или эмулятор Android.

Вот мой код для этой части:

String url = "www.thisismyendpoint.com"; 
String ci_session = "ci_session=token"; 

CookieStore cookieStore = new BasicCookieStore(); 
BasicClientCookie stdCookie = new BasicClientCookie("Cookie",ci_session); 
cookieStore.addCookie(stdCookie); 
DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpContext localContext = new BasicHttpContext(); 

localContext.setAttribute(ClientContext.COOKIE_STORE, 
     cookieStore); 
HttpPost httppost = new HttpPost(url); 

HttpResponse response = httpClient.execute(httppost, localContext); 

Это мой ответ в LogCat:

02-19 16:43:47.149: D/response(27539): response: <div style="border:1px solid    #990000;padding-left:20px;margin:0 0 10px 0;"> 
02-19 16:43:47.149: D/response(27539): <h4>A PHP Error was encountered</h4> 
02-19 16:43:47.149: D/response(27539): <p>Severity: Notice</p> 
02-19 16:43:47.149: D/response(27539): <p>Message: Undefined index: ci_session</p> 
02-19 16:43:47.149: D/response(27539): <p>Filename: controllers/test.php</p> 
02-19 16:43:47.149: D/response(27539): <p>Line Number: 28</p> 
02-19 16:43:47.149: D/response(27539): </div> 

я делаю что-то не так? Я попытался также установить ci_session в заголовки, но аналогичным образом это не сработало. Пожалуйста посоветуй. Спасибо!

+0

Похоже, что проблема с PHP-скриптом. Сообщение указывает, что «ci_session» не существует в массиве, который используется для захвата параметра «ci_session» из Java – Lobo

+0

, но он работает, когда я имитирую тот же запрос в браузере, поэтому мне интересно, не удалось ли я что-то сделать in android – kenwjj

ответ

2

Вы уверены, что cookie установлен правильно?
В моем случае, я использую HttpGet и установить куки вручную:

HttpGet httpGet = new HttpGet(url); 
httpGet.addHeader("Cookie", cookie); 

Печенье хранится в sharedPreferences. Должен работать для HttpPost так же, как я думаю.

+0

Он работает так же, как и для HttpPost. –

+0

Да, я получил его на работу. Не могу в это поверить. самые простые решения ускользают от нас все время. – kenwjj

+0

не могли бы вы разместить все свое решение? – Dimitri

2

Я столкнулся с аналогичными проблемами. Вы не должны создавать новый DefaultHttpClient для каждого нового запроса. Вместо этого используйте статический singleton one и используйте его для всех ваших запросов Http Request.

Смежные вопросы