#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()