Обновление: проблема НЕ связана с необходимостью кодирования URL. Это делается с помощью Retrofit. Если я кодирую URL-адрес, а затем передаю его в Retrofit, URL-адрес кодируется дважды и в конечном итоге выглядит следующим образом:
Обратите внимание на %257C
. Первый раунд | -> %7C
. Второй тур %7C -> %257C
Я пытаюсь выполнить HTTP-запрос GET с помощью Retrofit. Запрос выглядит следующим образом: https://s
В коде вызов выглядит так
@GET("get_user_info")
Call<ResponseBody> getUserMeta(
@Query("id") int userId,
@Query("cookie") String cookie
);
Когда я выполняю этот запрос, Request
выглядит так:
Request{method=GET, url=https://example.com/api/get_user_info/?id=12345&[email protected]|1492357107|fyVzRUYC9h|4f889e1976c2cd87aac, tag=null}
(Взято из консоли после логирования call.request().toString()
)
После выполнения вызова я получаю сообщение об ошибке от своего API о том, что файл cookie недействителен. Ответ выглядит следующим образом:
Response{protocol=h2, code=404, message=, url=https://example.com/api/get_user_info/?id=12345&[email protected]}
(Взято из консоли после входа Response<ResponseBody> response.toString()
)
Как видите, два URL-адреса не совпадают. Символ |
каким-то образом был удален из параметра cookie в URL-адресе ответа.
Вы можете подумать, что это как-то связано с моим API и что файл cookie на самом деле неверен, но если я скопирую и вставлю URL-адрес Request
прямо в свой браузер, он будет выполнен без ошибок (статус 200). Если Retrofit выполняет вызов, я получаю 404.
Очевидно, что Retrofit выполняет второй, неверный URL. Это явно так, потому что первый URL-адрес не возвращает 404 при выполнении в браузере, а второй возвращает.
Что происходит? Любая помощь приветствуется.
Дополнительная информация:
Я использую compile 'com.squareup.retrofit2:retrofit:2.2.0'
в моем модуле приложения build.gradle.
Я создаю экземпляр своего клиента Retrofit следующим образом:
Retrofit retroFit = new Retrofit.Builder()
.baseUrl("https://example.com/api/")
.build();
%7C
- person Compass   schedule 23.06.2017