Кодирование адреса URL HTTP в Java

Паттерны свойств Scala, поэтому вы можете посмотреть их, добавив их по одному:

  1. Начать с new A => foo = "A"
  2. Стек with D => foo = "DA"
  3. Стек with C, который складывается with B => foo = "CBDA"
  4. Стек with B ничего не делает, потому что B уже уложен в C => foo = "CBDA"

Вот сообщение в блоге о том, как Scala решает проблему наследования алмазов.

356
задан Eddie 6 April 2009 в 16:46
поделиться

6 ответов

java.net. Класс URI может помочь; в документации URL Вы находите

Отметьте, класс URI действительно выполняет выход своих полей компонента при определенных обстоятельствах. Рекомендуемый способ справиться с кодированием и декодированием URL состоит в том, чтобы использовать URI

Используйте одного из конструкторов больше чем с одним аргументом, как:

URI uri = new URI(
    "http", 
    "search.barnesandnoble.com", 
    "/booksearch/first book.pdf",
    null);
URL url = uri.toURL();
//or String request = uri.toString();

(конструктор отдельного аргумента URI НЕ выходит из запрещенных символов),


Только запрещенных символов оставляет вышеупомянутый код - он НЕ выходит из символов неASCII (см. комментарий fatih).
toASCIIString метод может использоваться для получения Строки только с символами US-ASCII:

URI uri = new URI(
    "http", 
    "search.barnesandnoble.com", 
    "/booksearch/é",
    null);
String request = uri.toASCIIString();

Для URL с запросом как http://www.google.com/ig/api?weather=São Paulo, используйте версию с 5 параметрами конструктора:

URI uri = new URI(
        "http", 
        "www.google.com", 
        "/ig/api",
        "weather=São Paulo",
        null);
String request = uri.toASCIIString();
294
ответ дан River 23 November 2019 в 00:21
поделиться

URLEncoding может закодировать URL HTTP очень хорошо, поскольку Вы, к сожалению, обнаружили. Строка, в которой Вы передали, "http://search.barnesandnoble.com/booksearch/first book.pdf", был правильно и полностью закодирован в закодированную URL форму. Вы могли передать ту всю длинную строку напыщенности речи, которую Вы возвратили в качестве параметра в URL, и это могло декодироваться назад в точно строку, в которой Вы передали.

Это кажется, что Вы хотите сделать что-то немного различное, чем передача всего URL в качестве параметра. Из того, что я собираюсь, Вы пытаетесь создать поисковый URL, который похож на "http://search.barnesandnoble.com/booksearch/whateverTheUserPassesIn". Единственной вещью, которую необходимо закодировать, является бит "whateverTheUserPassesIn", поэтому возможно, все, что необходимо сделать, что-то вроде этого:

String url = "http://search.barnesandnoble.com/booksearch/" + 
       URLEncoder.encode(userInput,"UTF-8");

Это должно произвести что-то скорее более допустимое для Вас.

7
ответ дан Brandon Yarbrough 23 November 2019 в 00:21
поделиться

Мелочные придирки: строкой, содержащей пробельный символ по определению, не является URI. Таким образом, то, что Вы ищете, является кодом, который реализует выход URI, определенный в Разделе 2.1 из RFC 3986.

11
ответ дан Julian Reschke 23 November 2019 в 00:21
поделиться

Да кодирование URL собирается закодировать ту строку так, чтобы это было бы передано правильно в URL конечному месту назначения. Например, у Вас не могло быть http://stackoverflow.com?url=http://yyy.com. UrlEncoding параметр зафиксировал бы то значение параметра.

Таким образом, у меня есть два варианта для Вас:

  1. У Вас есть доступ к пути отдельным от домена? Раз так Вы можете только к UrlEncode путь. Однако, если дело обстоит не так затем опция 2 может быть для Вас.

  2. Получите commons-httpclient-3.1. Это имеет класс URIUtil:

    System.out.println (URIUtil.encodePath ("http://example.com/x y", "ISO-8859-1"));

Это произведет точно, что Вы ищете, поскольку это только закодирует часть пути URI.

К вашему сведению Вам будут нужны кодек свободного городского населения и вход свободного городского населения для этого метода для работы во времени выполнения.

26
ответ дан SW4 23 November 2019 в 00:21
поделиться

я использую, это

org.apache.commons.text.StringEscapeUtils.escapeHtml4("my text % & < >");

добавляет этот dependecy

 <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-text</artifactId>
        <version>1.8</version>
    </dependency>
0
ответ дан 23 November 2019 в 00:21
поделиться

Предупреждаем, что большинство ответов выше НЕПРАВИЛЬНЫ.

Класс URLEncoder, несмотря на свое название, НЕ является тем, что должно быть здесь. Очень жаль, что Sun назвала этот класс так раздражающе. URLEncoder предназначен для передачи данных в качестве параметров, а не для кодирования самого URL.

Другими словами, "http://search.barnesandnoble.com/booksearch/first book.pdf" - это URL. Параметрами будут, например, "http://search.barnesandnoble.com/booksearch/first book.pdf?parameter1=this¶m2=that". Параметры - это то, для чего вы будете использовать URLEncoder.

Следующие два примера демонстрируют различия между этими двумя методами.

Следующий пример выдает неправильные параметры в соответствии со стандартом HTTP. Обратите внимание, что амперсанд (&) и плюс (+) закодированы неверно.

uri = new URI("http", null, "www.google.com", 80, 
"/help/me/book name+me/", "MY CRZY QUERY! +&+ :)", null);

// URI: http://www.google.com:80/help/me/book%20name+me/?MY%20CRZY%20QUERY!%20+&+%20:)

Ниже приведены правильные параметры, при этом запрос закодирован правильно. Обратите внимание на пробелы, амперсанды и знаки плюс.

uri = new URI("http", null, "www.google.com", 80, "/help/me/book name+me/", URLEncoder.encode("MY CRZY QUERY! +&+ :)", "UTF-8"), null);

// URI: http://www.google.com:80/help/me/book%20name+me/?MY+CRZY+QUERY%2521+%252B%2526%252B+%253A%2529
86
ответ дан 23 November 2019 в 00:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: