Почему компоненты http HttpClient удаляют кавычки из значений Cookie? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть приложение, которое использует https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore 4.4.7 для выполнения остальных вызовов API.

У меня есть ситуация, когда я собираюсь создать API для защищенного веб-приложения:

HTTP-запрос GET 1: https://myapp.com/api/myrestrequest

Он видит, что мне не хватает файла cookie JESSIONID, поэтому он отправляет меня через 302 на другую страницу, чтобы получить:

302 GET запрос 2: https://myapp.com/sso/dologin?referer=/api/myrestrequest

На этой странице читается мой файл cookie сеанса SSO, а затем отправляется обратно на исходный запрос:

HTTP-запрос GET 3: https://myapp.com/api/myrestrequest

Достаточно просто, вполне нормально. Но во время запроса GET 2 создается специальный файл cookie, который выглядит следующим образом:

J-Login-Cookie="a8966ab6c6d65a7d6a"

Но когда HTTP-клиент сохраняет этот cookie-файл в хранилище cookie, он сохраняет его следующим образом:

J-Login-Cookie=a8966ab6c6d65a7d6a

Удаляет кавычки.

Почему это? Мне нужно использовать HttpRequestInterceptor, чтобы добавить мои цитаты обратно к значению cookie, чтобы запрос 3 не завершился неудачей. Есть ли способ получить его, чтобы он прекратил удалять эти кавычки?

curl не имеет такого же поведения.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Был вопрос о противоположном поведении.

Также я нашел объяснение , почему поведение HTTP-клиента Apache правильное (кроме самого RFC)

Механизм управления состоянием HTTP RFC

UPDATE

Источник куки-файла Apache HTTP Client парсер и некоторые тесты для него. Ссылки на ветку master, заполните, чтобы настроить ветку и зафиксировать версию, как вам нужно.

0 голосов
/ 01 октября 2018

Ближайшие кавычки удаляются из значений здесь:

https://android.googlesource.com/platform/libcore/+/android-cts-7.0_r1/ojluni/src/main/java/java/net/HttpCookie.java#1110

Судя по всему, вы можете окружить свое значение апострофами. Прямо перед отправкой перенаправленного запроса выполните итерацию всех файлов cookie, ищущих J-Login-Cookie, и измените значение с "a8966ab6c6d65a7d6a" на '"a8966ab6c6d65a7d6a"', чтобы удалить только внешние апострофы.

Это в основном то же самое, что и использование перехватчика. Единственным другим вариантом будет использование другой клиентской библиотеки HTTP.

...