Подтвердить что ты не робот

Uri Builder в android - '/' заменен на "% 2F" и ":" заменен на "% 3A"

Я хочу создать следующий URI -

https://10.112.88.182:8443/Vehicle/services/socialService/login

...

Builder builder = new Builder();
builder.scheme(Constants.URL_SCHEME);
builder.authority(host);
builder.appendPath(service + "/" +method);
return builder.build().toString();

где

  • URL_SCHEME - https
  • host - 10.112.88.182:8443/Vehicle/services/
  • service - socialService
  • method - login

Когда этот код работает, я получаю следующий URI -

https://10.112.88.182%3A8443%2FVehicle%2Fservices%2F/socialService%2Flogin

/ заменяется на %2F, а : заменяется на %3A

4b9b3361

Ответ 1

Как работает Uri.Builder. Он кодирует ненадежные URL-адреса со специальным значением в их шестнадцатеричные значения %xx.

Чтобы запретить кодирование частей URI, которые уже правильно закодированы, используйте encoded версии функций построителя:

builder.encodedAuthority(host);
builder.appendEncodedPath(service + "/" +method);

Но так как все ваши части URL уже готовы и не нуждаются в дальнейшей кодировке, проще просто использовать обычный StringBuilder для объединения деталей.

Ответ 2

Как сказал laalto, так работает Uri.Builder, но если вы хотите получить uri в обычной форме url, как в вашем случае: https://10.112.88.182:8443/Vehicle/services/socialService/login  вы можете сделать:

URL url = new URL(URLDecoder.decode(builder.build().toString(), "UTF-8"));

Ответ 3

Решение довольно просто, просто используйте appendEncodedPath(), он не будет кодировать вашу строку, он просто добавляет его, как есть.