Я пишу приложение Java, которое анализирует ссылки из html и использует их для запроса их содержимого. Область кодирования URL-адресов, когда мы понятия не имеем о «намерениях» автора URL-адреса, очень сложна. Например, когда использовать% 20 или + - сложный вопрос: (% 20 vs + ), браузер будет выполнять эту кодировку для URL-адреса, содержащего некодированное пространство.
Есть много других ситуаций, в которых браузер изменяет содержимое проанализированного URL-адреса перед запросом страницы, например:
http://www.Example.com/þ
... когда анализируется и запрашивается браузером, становится ...
http://www.Example.com/%C3%BE
.. а также...
http://www.Example.com/&
... когда анализируется и запрашивается браузером, становится ...
http://www.Example.com/&
Итак, мой вопрос: вместо того, чтобы заново изобретать колесо, возможно, есть библиотека Java, которую я не нашел для этой работы? В противном случае может ли кто-нибудь указать мне на эталонную реализацию в общем источнике браузеров? или, возможно, псевдокод? В противном случае любые рекомендации по подходу приветствуются!
Спасибо, Джон
2 ответа
HtmlUnit, безусловно, может выбирать URL-адреса из HTML и разрешать их (и многое другое).
Однако я не знаю, справится ли он с вашими угловыми случаями. Я предполагаю, что он справится со вторым, поскольку это нормальное, хотя и немного забавное использование HTML и URL-адреса. Я не знаю, что он будет делать со вторым, в котором неверный URL-адрес закодирован в HTML.
Я также знаю, что если вы обнаружите, что HTMLUnit делает что-то не так, как это делают настоящие браузеры, напишите тестовый пример JUnit, чтобы доказать это, и подать отчет об ошибке, то его сопровождающие с радостью исправят это с большой живостью.
Как насчет использования java.net.URLEncoder.encode () и java.net.URLDecoder.decode ().
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].