Стандартная нормализация URL - Java - PullRequest
9 голосов
/ 29 июля 2010

Я хотел бы спросить, есть ли какой-либо пакет или библиотека Java, которые имеют стандартную нормализацию URL?

5 компонентов представления URL

http://www[dot]example[dot]com:8040/folder/exist?name=sky#head

  1. схема: http
  2. авторитет: www.example.com: 8040
  3. путь: / папка / существовать
  4. запрос: ? Name = sky
  5. фрагмент: # голова

3 типа стандартной нормализации URL

Нормализация на основе синтаксиса

  • Нормализация регистра - преобразование всех букв в компонентах схемы и полномочий в нижний регистр
  • Нормализация в процентах - декодировать любой октет в процентах, соответствующий незарезервированному символу, например,% 2D для дефиса и% 5 для подчеркивания
  • Нормализация сегментов пути - удаление точечных сегментов из компонента пути, таких как ‘.’ И ‘..’

Нормализация на основе схемы

  • Добавить трейлинг ‘/’ после компонента авторизации URL
  • Удалить номер порта по умолчанию, например, 80 для схемы http
  • Обрезать фрагмент URL

Нормализация на основе протокола

  • Уместно, только когда результаты доступа к ресурсам эквивалентны
  • Например, example.com/data направляется на example.com/data/ сервером происхождения

Ответы [ 3 ]

5 голосов
/ 08 августа 2014

Как уже упоминалось, java.net.URL и / или java.net.URI являются некоторыми очевидными отправными точками.

Вот некоторые другие варианты:

  1. Galimatias (по-испански "gibberish"), по-видимому, является самоуверенной и относительно популярной библиотекой нормализации URL для Java.Исходный код можно найти по адресу github.com / smola / galimatias .

    Галиматия началась из-за разочарования в java.net.URL и java.net.URI.Оба они хороши для базовых сценариев использования, но сильно нарушены для других

  2. Библиотека github.com / sentric / url-normalization предоставляет другую (необычный, на мой взгляд) подход, когда он переворачивает часть домена;например, «com.stackoverflow» вместо «stackoverflow.com».

Вы можете найти другие варианты, иногда реализованные в таких языках, как Python, Ruby и PHP, на Github.

3 голосов
/ 29 июля 2010
URI uri = URI.create("http://www.example.com:8040/folder/exist?name=sky#head");
String scheme = uri.getScheme();
String authority = uri.getAuthority();
// ...

http://java.sun.com/j2se/1.4.2/docs/api/java/net/URI.html

...