Библиотека Scala или Java для исправления некорректных URI - PullRequest
7 голосов
/ 03 октября 2011

Кто-нибудь знает хорошую библиотеку Scala или Java, которая может исправить типичные проблемы в некорректных URI, например, содержащие символы, которые следует экранировать, но это не так?

Ответы [ 2 ]

3 голосов
/ 03 октября 2011

Я протестировал несколько библиотек, включая устаревшую URIUtil HTTPClient, не чувствуя, что нашел какое-либо жизнеспособное решение.Как правило, я имел достаточно успеха с этим типом java.net.URI конструкции, хотя:

/**
 * Tries to construct an url by breaking it up into its smallest elements
 * and encode each component individually using the full URI constructor:
 *
 *    foo://example.com:8042/over/there?name=ferret#nose
 *    \_/   \______________/\_________/ \_________/ \__/
 *     |           |            |            |        |
 *  scheme     authority       path        query   fragment
 */
public URI parseUrl(String s) throws Exception {
   URL u = new URL(s);
   return new URI(
        u.getProtocol(), 
        u.getAuthority(), 
        u.getPath(),
        u.getQuery(), 
        u.getRef());
}

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

public String urlDecode(String url, String encoding) throws UnsupportedEncodingException, IllegalArgumentException {
    String result = URLDecoder.decode(url, encoding);
    return result.equals(url) ? result : urlDecode(result, encoding);
}
1 голос
/ 23 февраля 2014

Я бы не советовал использовать java.net.URLEncoder для процентного кодирования URI. Несмотря на название, он не подходит для кодирования URL-адресов, поскольку он не соответствует стандарту rfc3986 и вместо этого кодирует в формат application/x-www-form-urlencoded MIME ( подробнее здесь )

Для кодирования URI в Scala я бы рекомендовал класс Uri из spray-http. scala-uri является альтернативой (отказ от ответственности: я автор).

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