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

Не могли бы вы поделиться ссылкой на реализацию синтаксического анализа URL?

Насколько я понимаю, URL-адрес состоит из следующих полей:

  • Протокол (http, https, ftp и т.д.)
  • Имя пользователя
  • Пароль пользователя
  • Адрес хоста (IP-адрес или полное доменное имя DNS)
  • Порт (что может подразумеваться)
  • Путь к документу внутри корневого каталога сервера
  • Набор аргументов и значений
  • Часть документа (#)

а

protocol://user:[email protected]:port/path/document?arg1=val1&arg2=val2#part

Мне нужен код для получения значения (или null/empty value if not set) любого из этих полей из любой заданной строки URL. Могу ли я реализовать это самостоятельно или уже есть код для этого, поэтому мне не нужно изобретать колесо?

Меня особенно интересует Scala или Java-код. Также могут быть полезны код С#, PHP, Python или Perl.

4b9b3361

Ответ 1

Класс URL дает вам все, что вам нужно. См. http://download.oracle.com/javase/6/docs/api/java/net/URL.html

URL url = new URL("protocol://user:[email protected]:port/path/document?arg1=val1&arg2=val2#part");
url.getProtocol();
url.getUserInfo();
url.getAuthority();
url.getHost();
url.getPort();
url.getPath(); // document part is contained within the path field
url.getQuery();
url.getRef(); // gets #part

Ответ 2

Для этого используйте класс java.net.URI. URL-адреса предназначены для реальных ресурсов и реальных протоколов. URI для возможных несуществующих протоколов и ресурсов.

Ответ 3

В Java просто используйте класс URL. Он предоставляет методы, такие как getProtocol, getHost и т.д., Чтобы получить разные части URL.

Ответ 5

URL-адрес не поддерживает ldap по умолчанию. Можно расширить URL-адрес и добавить протоколы, но в итоге я получил простой парсер и небольшой новый класс.

Ответ 6

Основываясь на ответе @Codemwnci, ​​вот полный пример, чтобы получить filename от url с аргументами или без них:

URL videoUrl = new URL("https://somesite.com/path/v/t43.1792-2/1186696120_n.mp4?efg=something");
String videoFileName = videoUrl.getPath().substring(videoUrl.getPath().lastIndexOf("/") + 1);

1186696120_n.mp4