URI
Утилиты для работы с URI.
Этот модуль предоставляет функции для работы с URI (например, для разбора URI или кодирования строковых запросов). Функции в этом модуле реализованы в соответствии с RFC 3986.
Краткое описание
Типы
- t()
Функции
- char_reserved?(char)
-
Проверяет, является ли символ «зарезервированным» символом в URI
- char_unescaped?(char)
-
Проверяет, разрешен ли символ без экранирования в URI
- char_unreserved?(char)
-
Проверяет, является ли символ «незарезервированным» символом в URI
- decode(uri)
-
Декодирует URI, заменяя проценты на соответствующие символы
- decode_query(query, map \\ %{})
-
Декодирует строку запроса в карту
- decode_www_form(string)
-
Декодирует строку как «x-www-form-urlencoded»
- default_port(scheme)
-
Возвращает порт по умолчанию для данного схемы
- default_port(scheme, port)
-
Регистрирует порт по умолчанию
portдля данногоscheme - encode(string, predicate \\ &char_unescaped?/1)
-
Экранирует все символы, требующие экранирования в строке
- encode_query(enumerable)
-
Кодирует перечислимый объект в строку запроса
- encode_www_form(string)
-
Кодирует строку как «x-www-form-urlencoded»
- merge(uri, rel)
-
Объединяет два URI
- parse(uri)
-
Разбирает корректную строку URI на составляющие
- query_decoder(query)
-
Возвращает поток пар ключ-значение в данной
query - to_string(uri)
-
Возвращает строковое представление данной структуры
URI
Типы
t()
t() :: %URI{authority: nil | binary(), fragment: nil | binary(), host: nil | binary(), path: nil | binary(), port: nil | :inet.port_number(), query: nil | binary(), scheme: nil | binary(), userinfo: nil | binary()} Функции
char_reserved?(char)
char_reserved?(char()) :: boolean()
Проверяет, является ли символ «зарезервированным» символом в URI.
Зарезервированные символы указаны в RFC 3986, раздел 2.2.
Примеры
iex> URI.char_reserved?(?+) true
char_unescaped?(char)
char_unescaped?(char()) :: boolean()
Проверяет, разрешен ли символ без экранирования в URI.
Это значение по умолчанию, используемое в URI.encode/2, где как зарезервированные, так и незарезервированные символы остаются без экранирования.
Примеры
iex> URI.char_unescaped?(?{)
false char_unreserved?(char)
char_unreserved?(char()) :: boolean()
Проверяет, является ли символ «незарезервированным» символом в URI.
Незарезервированные символы указаны в RFC 3986, раздел 2.3.
Примеры
iex> URI.char_unreserved?(?_) true
decode(uri)
decode(binary()) :: binary()
Декодирует URI, заменяя проценты на соответствующие символы.
Примеры
iex> URI.decode("http%3A%2F%2Felixir-lang.org")
"http://elixir-lang.org" decode_query(query, map \\ %{})
decode_query(binary(), map()) :: map()
Декодирует строку запроса в карту.
Принимая строку запроса в формате key1=value1&key2=value2..., эта функция вставляет каждую пару ключ-значение в строке запроса в качестве одной записи в заданную map. Ключи и значения в результирующей карте будут бинарными. Ключи и значения будут декодированы, заменяя проценты на соответствующие символы.
Используйте query_decoder/1, если вы хотите вручную перебрать каждое значение.
Примеры
iex> URI.decode_query("foo=1&bar=2")
%{"bar" => "2", "foo" => "1"}
iex> URI.decode_query("percent=oh+yes%21", %{"starting" => "map"})
%{"percent" => "oh yes!", "starting" => "map"} decode_www_form(string)
decode_www_form(binary()) :: binary()
Декодирует строку как «x-www-form-urlencoded».
Примеры
iex> URI.decode_www_form("%3Call+in%2F")
"<all in/" default_port(scheme)
default_port(binary()) :: nil | non_neg_integer()
Возвращает порт по умолчанию для данного схемы.
Если схема неизвестна модулю URI, эта функция возвращает nil. Порт по умолчанию для любого схемы можно настроить глобально через default_port/2.
Примеры
iex> URI.default_port("ftp")
21
iex> URI.default_port("ponzi")
nil default_port(scheme, port)
default_port(binary(), non_neg_integer()) :: :ok
Регистрирует порт по умолчанию port для данного scheme.
После вызова этой функции port будет возвращаться функцией default_port/1 для заданного схемы scheme. Обратите внимание, что эта функция изменяет порт по умолчанию для заданного scheme глобально, то есть для всех приложений.
Рекомендуется вызывать эту функцию в обратном вызове запуска вашего приложения, если вы хотите зарегистрировать новые URI.
encode(string, predicate \\ &char_unescaped?/1)
encode(binary(), (byte() -> boolean())) :: binary()
Экранирует все символы, требующие экранирования в строке.
Это означает, что зарезервированные символы, такие как : и /, а также так называемые незарезервированные символы, которые имеют одинаковое значение как в экранированном, так и в неэкранированном виде, по умолчанию не будут экранированы.
См. encode_www_form, если вам нужно экранировать зарезервированные символы.
Эта функция также принимает функцию предиката predicate в качестве необязательного аргумента. Если она передана, эта функция будет вызываться с каждым байтом в string в качестве аргумента и должна возвращать true, если данный байт должен остаться в неизменном виде.
Примеры
iex> URI.encode("ftp://s-ite.tld/?value=put it+й")
"ftp://s-ite.tld/?value=put%20it+%D0%B9"
iex> URI.encode("a string", &(&1 != ?i))
"a str%69ng" encode_query(enumerable)
encode_query(term()) :: binary()
Кодирует перечислимый объект в строку запроса.
Принимает перечислимый объект, который перечисляет список пар ключ-значение (например, карту или список ключевых слов) и возвращает строку в формате key1=value1&key2=value2..., где ключи и значения закодированы в соответствии со спецификацией encode_www_form/1.
Ключи и значения могут быть любыми терминами, которые реализуют протокол String.Chars, за исключением списков, которые запрещены.
Примеры
iex> hd = %{"foo" => 1, "bar" => 2}
iex> URI.encode_query(hd)
"bar=2&foo=1"
iex> query = %{"key" => "value with spaces"}
iex> URI.encode_query(query)
"key=value+with+spaces"
iex> URI.encode_query %{key: [:a, :list]}
** (ArgumentError) encode_query/1 values cannot be lists, got: [:a, :list] encode_www_form(string)
encode_www_form(binary()) :: binary()
Кодирует строку как «x-www-form-urlencoded».
Пример
iex> URI.encode_www_form("put: it+й")
"put%3A+it%2B%D0%B9" merge(uri, rel)
merge(t() | binary(), t() | binary()) :: t()
Объединяет два URI.
Эта функция объединяет два URI в соответствии с RFC 3986, раздел 5.2.
Примеры
iex> URI.merge(URI.parse("http://google.com"), "/query") |> to_string
"http://google.com/query"
iex> URI.merge("http://example.com", "http://google.com") |> to_string
"http://google.com" parse(uri)
parse(t() | binary()) :: t()
Разбирает корректную строку URI на составляющие.
Обратите внимание, что эта функция ожидает корректный URI и не выполняет никакой валидации. См. раздел «Примеры» ниже для примеров того, как URI.parse/1 можно использовать для разбора различных URI.
Эта функция использует регулярное выражение для разбора, как определено в RFC 3986, Приложение B.
Когда URI задан без порта, значение, возвращаемое функцией URI.default_port/1 для схемы URI, используется для поля :port.
Если функция получает структуру %URI{}, она возвращает её без изменений.
Примеры
iex> URI.parse("http://elixir-lang.org/")
%URI{scheme: "http", path: "/", query: nil, fragment: nil,
authority: "elixir-lang.org", userinfo: nil,
host: "elixir-lang.org", port: 80}
iex> URI.parse("//elixir-lang.org/")
%URI{authority: "elixir-lang.org", fragment: nil, host: "elixir-lang.org",
path: "/", port: nil, query: nil, scheme: nil, userinfo: nil}
iex> URI.parse("/foo/bar")
%URI{authority: nil, fragment: nil, host: nil, path: "/foo/bar",
port: nil, query: nil, scheme: nil, userinfo: nil}
iex> URI.parse("foo/bar")
%URI{authority: nil, fragment: nil, host: nil, path: "foo/bar",
port: nil, query: nil, scheme: nil, userinfo: nil} query_decoder(query)
query_decoder(binary()) :: Enumerable.t()
Возвращает поток пар ключ-значение в заданном query.
Ключ и значение в каждой паре будут бинарными и будут декодированы, заменяя проценты на соответствующие символы.
Примеры
iex> URI.query_decoder("foo=1&bar=2") |> Enum.to_list()
[{"foo", "1"}, {"bar", "2"}] to_string(uri)
to_string(t()) :: binary()
Возвращает строковое представление структуры URI.
iex> URI.to_string(URI.parse("http://google.com"))
"http://google.com"
iex> URI.to_string(%URI{scheme: "foo", host: "bar.baz"})
"foo://bar.baz"
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.5.3/URI.html