как извлечь базовый URL из заданного URL с помощью java

#java #jtidy #base-url

#java #jtidy #базовый url

Вопрос:

Я пытаюсь извлечь базовый URL с помощью Java. Я использовал синтаксический анализатор jtidy в своем коде для извлечения заголовка. Я правильно получаю заголовок с помощью jtidy, но я не получаю базовый URL из заданного URL.

У меня есть некоторый URL в качестве входных данных:

 String s1 = "http://staff.unak.is/andy/GameProgramming0910/new_page_2.htm";
String s2 = "http://www.complex.com/pop-culture/2011/04/10-hottest-women-in-fast-and-furious-movies";
  

Из первой строки я хочу извлечь "http://staff.unak.is/andy/GameProgramming0910/" в качестве базового URL, а из второй строки я хочу "http://www.complex.com/" в качестве базового URL.

Я использую код:

 URL url = new URL(s1);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream in = conn.getInputStream();
Document doc = new Tidy().parseDOM(in, null);
String titleText = doc.getElementsByTagName("title").item(0).getFirstChild()
.getNodeValue();
  

Я получаю titletext , но, пожалуйста, можете сообщить мне, как получить базовый URL из указанного выше URL?

Комментарии:

1. Какие правила подскажут вам, что http://www.complex.com/ является базовым URL, а что нет http://www.complex.com/pop-culture/2011/04/ ?

Ответ №1:

Попробуйте использовать java.net .Класс URL, это поможет вам:

Во втором случае, когда это проще, вы могли бы использовать новый URL (s2).getHost();

В первом случае вы могли бы получить хост, а также использовать метод GetFile() и удалить строку после последней косой черты («/»). что-то вроде: (код не тестировался)

 URL url = new URL(s1);
String path = url.getFile().substring(0, url.getFile().lastIndexOf('/'));
String base = url.getProtocol()   "://"   url.getHost()   path;
  

Комментарии:

1. Я проголосовал «за», но мне кажется, что третьим утверждением должно быть: String base = url.getProtocol() «://» url.getHost() path;

2. Я ДУМАЮ , что URL getProtocol() возвращает «://», но я не тестировал : (

3. @Pih по крайней мере, в Java 6 этого не происходит. Вы должны добавить его. Думаю, что «://» не является частью имени протокола.

4. строка URL нуждается в проверке, имеет ли она протокол, иначе генерируется исключение неправильного URL.

5. Похоже, что в случае, если порт отличается от порта по умолчанию, лучше использовать url.getAuthority(), а не getHost(). info: docs.oracle.com/javase/tutorial/networking/urls/urlInfo.html

Ответ №2:

Вы используете java.net .Класс URL для разрешения относительных URL-адресов.

Для первого случая: удаление имени файла из пути:

 new URL(new URL(s1), ".").toString()
  

Для второго случая: установка корневого пути:

 new URL(new URL(s2), "/").toString()