2017-02-08 19 views
0

при соединении с использованием HttpClient в android из HttpResponse, способного получить все возможное значение заголовка «set-cookie» (JESSIONID и XSCRF-TOKEN) .Проверьте снимок экрана. HttpResponse headerДоступ ко всем заголовкам ответов с использованием volley api в приложении android

Сейчас работает с андроидами студией с залповым API для подключения, я получаю только одно значение «Set-Cookie» заголовок (JESSIONID только) .Увидь ниже: Volley response header

Я также проверить https://groups.google.com/forum/#!topic/volley-users/rNTlV-LORzY. Для чего необходимо внести изменения в проект апелляции волейбола. Но не знаю, как редактировать volley api. Если какое-либо другое решение представляет собой любезное руководство.

Просьба помочь получить несколько значений «set-cookie» с помощью volley api.

ответ

2

Задача:
Проблема заключается в том, что, к сожалению, проблема в волейболе. Я имел эту проблему и после долгих поисков я понял, что есть метод, называемый convertHeaders в BasicNetwork классе, который обрабатывает заголовки, как это:

protected static Map<String, String> convertHeaders(Header[] headers) { 
    Map<String, String> result = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER); 
    for (int i = 0; i < headers.length; i++) { 
     result.put(headers[i].getName(), headers[i].getValue()); 
    } 
    return result; 
} 

Вы видите результат Map<String, String>, который не может содержать одинаковые ключи с различными значениями , поэтому у вас всегда есть только последний cookie.
Стандарт настройки печенья говорит нам, что мы должны отделить печенье с ;, например, если вы хотите, чтобы содержать 2 ключ-значение в запросе печенья вы должны поставить их так: Cookies: k1=v1;k2=v2

Solution:
В в вашем случае у вас есть два варианта.

1 - изменить свой код в стороне сервера, так что ответ содержит только Set-Cookie отделенных ключевые ценности, ;. пример вашего ответа:

Set-Cookie: JESSIONID=qZtQ...;Path=/;HttpOnly;XSRF-TOKEN=6c65... 

2 - получить Volley исходный код и изменить этот метод багги и сделать фиксированный .jar снова! эта опция моя любимая причина вы не трогали ответа сервера

Моя реализация этого метода:

protected static Map<String, String> convertHeaders(Header[] headers) { 
    TreeMap result = new TreeMap(String.CASE_INSENSITIVE_ORDER); 

    for(int i = 0; i < headers.length; ++i) { 
     String headerName = headers[i].getName(); 
     if(!result.containsKey(headerName)) { 
      result.put(headers[i].getName(), headers[i].getValue()); 
     } else { 
      String value = (String)result.get(headerName); 
      String mergedValue = value + ";" + headers[i].getValue(); 
      result.remove(headerName); 
      result.put(headerName, mergedValue); 
     } 
    } 

    return result; 
} 
+0

Благодаря Sepehr Бехрузи, Google Android разработчик должен позаботиться об этой проблеме. – user2021938