Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
27 Янв 2023
2 мин
387

Кодирование HTTP URL-адресов в Java

Один из распространенных вопросов, с которым сталкиваются начинающие разработчики на Java, касается правильной кодировки HTTP URL-адресов. Это важный аспект

Один из распространенных вопросов, с которым сталкиваются начинающие разработчики на Java, касается правильной кодировки HTTP URL-адресов. Это важный аспект работы с сетью, поскольку некорректно закодированный URL может привести к неправильной интерпретации запроса и ошибкам.

Примером может быть ситуация, когда URL содержит пробелы. Пробелы не допустимы в URL-адресах, поэтому они должны быть закодированы. В стандарте URL-кодирования пробел обычно заменяется на %20.

Рассмотрим пример URL:

http://example.com/first book.pdf

В Java есть утилитный класс java.net.URLEncoder, который предназначен для кодирования строк в соответствии со стандартом x-www-form-urlencoded. Однако, если попытаться использовать его для кодирования URL, результат будет некорректным:

java.net.URLEncoder.encode(url.toString(), "ISO-8859-1");

Выдаст:

http%3A%2F%2Fexample.com%2Ffirst+book.pdf

Как видим, пробел заменен на +, а не на %20, что является стандартом для URL.

Это происходит потому, что URLEncoder предназначен для кодирования данных формы HTML, а не для URL. В данных формы пробелы заменяются на +.

Чтобы корректно закодировать URL в Java, можно использовать класс java.net.URI. Он предназначен для представления и манипулирования URI (унифицированным идентификатором ресурса), который является обобщением URL.

URI uri = new URI("http", null, "example.com", -1, "/first book.pdf", null, null);
String request = uri.toASCIIString();

Этот код выдаст корректно закодированный URL:

http://example.com/first%20book.pdf

Таким образом, при работе с URL в Java рекомендуется использовать класс java.net.URI для корректного кодирования.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий