Я пишу приложение 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, которую я не нашел для этой работы? В противном случае может ли кто-нибудь указать мне на эталонную реализацию в общем источнике браузеров? или, возможно, псевдокод? В противном случае любые рекомендации по подходу приветствуются!

Спасибо, Джон

0
Jonathan 30 Авг 2011 в 23:48

2 ответа

Лучший ответ

HtmlUnit, безусловно, может выбирать URL-адреса из HTML и разрешать их (и многое другое).

Однако я не знаю, справится ли он с вашими угловыми случаями. Я предполагаю, что он справится со вторым, поскольку это нормальное, хотя и немного забавное использование HTML и URL-адреса. Я не знаю, что он будет делать со вторым, в котором неверный URL-адрес закодирован в HTML.

Я также знаю, что если вы обнаружите, что HTMLUnit делает что-то не так, как это делают настоящие браузеры, напишите тестовый пример JUnit, чтобы доказать это, и подать отчет об ошибке, то его сопровождающие с радостью исправят это с большой живостью.

1
Tom Anderson 30 Авг 2011 в 20:59

Как насчет использования java.net.URLEncoder.encode () и java.net.URLDecoder.decode ().

0
mamboking 30 Авг 2011 в 20:20