Android DefaultHttpClient HttpResponse отсутствует поле заголовка Set-Cookie - PullRequest
6 голосов
/ 01 июля 2011

У меня есть сервер, использующий пружинную аутентификацию «запомнить меня», на которую я вхожу, используя Android DefaultHttpClient в методе POST. Я могу успешно войти в систему и даже получить созданные файлы cookie сеанса (в моем случае файл cookie jsessionid и весенняя защита помнят меня).

Но странная вещь после выполнения метода POST, как

mResponse = mDefaultHttpClient.execute(mHttpPost)

Я могу получить куки, но только с помощью метода getCookieStore в моем DefaultHttpClient, как

mDefaultHttpClient.getCookieStore()

без использования метода getAllHeaders объекта HttpResponse

headers = mResponse.getAllHeaders();
HeaderIterator headerIterrator = new BasicHeaderIterator(headers, null);
while (headerIterrator.hasNext()) {
  Header header = headerIterrator.nextHeader();
  headerStringBuilder.append(" " + header.getName() + ":" + header.getValue());
}
Log.e("Post response headers: ", headerStringBuilder.toString());

Здесь я получаю некоторые заголовки (Сервер, X-powered-By, Дата, Тип контента, Длина контента), но не заголовок Set-Cookie или несколько других (Access-control-Allow- * и т. Д.)

Спасибо за любую помощь!

ОБНОВЛЕНИЕ: похоже, что DefaultHttpClient не предоставляет некоторые заголовки. Я попытался добавить перехватчик ответа (как показано ниже), и getAllHeaders вернул все заголовки, которые я хотел. Спасибо за чтение моего вопроса!

    mDefaultHttpClient.addResponseInterceptor(new HttpResponseInterceptor() {
     public void process(final HttpResponse response, final HttpContext context)
                throws HttpException, IOException {
            Header[] headers = response.getAllHeaders();
            for (int i = 0; i < headers.length; i++) {
                Header header = headers[i];
                Log.e("HTTP: ", "name: " + header.getName());
                Log.e("HTTP: ", "value: " + header.getValue());
            }
        }

    });

Ответы [ 2 ]

1 голос
/ 19 ноября 2013

Вы пытались использовать HttpURLConnection вместо HttpClient? HttpClient, как следует из названия, является клиентом, затем он управляет файлами cookie для вас, а HttpURLConnection - нет.

Док говорит: «Клиенты HTTP инкапсулируют шведский стол объектов, необходимых для выполнения HTTP-запросов при обработке файлов cookie, аутентификации, управления соединениями и других функций».

0 голосов
/ 25 мая 2014

если вы установите cookie на стороне сервера, как session_start () в php, Set-Cookie будут отображаться в заголовках, но если вы не установили cookie, Set-Cookie не будут показаны.

после:

05-25 17:23:16.616: I/HTTP:(575): name: Set-Cookie
05-25 17:23:16.616: I/HTTP:(575): value: PHPSESSID=g29i01av8ddvpgsi7lpaj12lc3; path=/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...