Каков наилучший способ взять строку URL и кодировать ее - PullRequest
2 голосов
/ 23 ноября 2010

Я чувствую, что, должно быть, пропустил правильную ветку, потому что кажется, что на это уже был бы ясный ответ, так что извините, если это повторяется.Я читал множество тем здесь и в других местах, и я не увидел четкого ответа на этот вопрос «Вот как вы это делаете» ...

Программа будет получать полные URL-адреса в виде строк,Например: "http://www.stackoverflow.com/questions/somepage?somequery#somefragment"

Я хочу взять эту строку и убедиться, что она правильно закодирована для использования в соединении, как с HttpClient.

Из того, что я прочитал, похоже, что это можно сделатьиспользовать конструктор URI () с различными частями в качестве параметров, поэтому возникает вопрос, какой самый надежный способ получить строковый URL, о котором мы ничего не знаем, кроме его URL, и разбить егодо различных частей, необходимых для конструктора URI ().

Вот что я собрал вместе. Есть ли недостатки в этом методе?

URL url = new URL(urlString);
URI uri = new URI(url.getProtocol(), url.getAuthority(), url.getPath(), url.getQuery(), null);

Затем переменная uri содержитзакодирован, готов к использованию URI. Этот код работает до сих пор, но я хочу убедиться, что не может быть никаких подводных камней.

Спасибо

Ответы [ 2 ]

4 голосов
/ 23 ноября 2010

Класс URI выполняет экранирование своих компонентных полей при определенных обстоятельствах. Рекомендованным способом управления кодированием и декодированием URL-адресов является использование URI и преобразование между этими двумя классами с помощью toURI () и URI.toURL (). Ref: http://download.oracle.com/javase/1.5.0/docs/api/java/net/URL.html

Обратите внимание, что любой экземпляр URL, соответствующий RFC 2396, может быть преобразован в URI .Однако некоторые URL-адреса, которые не строго соответствуют требованиям, не могут быть преобразованы в URI.

URI.toURL - это удобный метод, работающий так, как будто его вызов эквивалентен вычислению выражения new URL(this.toString()) * после первой проверки того, что этот URI является абсолютным * e,

0 голосов
/ 23 ноября 2010

Я не думаю, что нужно создавать URI.URL, созданный с использованием «URL url = новый URL (urlString);»совершенно допустимо для использования HttpClient, если только конструкция URL не выдает исключение MalformedURLException.

Если у вас будет строка запроса (для GET), вам придется URLEncode it

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...