Spec-Zone.ru › Elixir 1.9

URI

Утилиты для работы с URI.

Этот модуль предоставляет функции для работы с URI (например, разбор URI или кодирование строк запроса). Функции в этом модуле реализованы в соответствии с RFC 3986.

Краткое описание

Типы

t()

Функции

char_reserved?(character)

Проверяет, является ли character зарезервированным в URI.

char_unescaped?(character)

Проверяет, разрешено ли character без экранирования в URI.

char_unreserved?(character)

Проверяет, является ли character незарезервированным в URI.

decode(uri)

Декодирует URI, удаляя проценты.

decode_query(query, map \\ %{})

Декодирует строку запроса в словарь.

decode_www_form(string)

Декодирует string как "x-www-form-urlencoded".

default_port(scheme)

Возвращает стандартный порт для заданного scheme.

default_port(scheme, port)

Регистрирует стандартный port для заданного scheme.

encode(string, predicate \\ &char_unescaped?/1)

Экранирует все символы, требующие экранирования, в string.

encode_query(enumerable)

Кодирует перечислимый объект в строку запроса.

encode_www_form(string)

Кодирует 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?(character)

Характеристики

char_reserved?(byte()) :: boolean()

Проверяет, является ли character зарезервированным символом в URI.

Как указано в RFC 3986, раздел 2.2, следующие символы зарезервированы: :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =

Примеры

iex> URI.char_reserved?(?+)
true

char_unescaped?(character)

Характеристики

char_unescaped?(byte()) :: boolean()

Проверяет, разрешено ли character в URI без экранирования.

Это значение по умолчанию используется в URI.encode/2, где как зарезервированные, так и незарезервированные символы остаются без экранирования.

Примеры

iex> URI.char_unescaped?(?{)
false

char_unreserved?(character)

Характеристики

char_unreserved?(byte()) :: boolean()

Проверяет, является ли character незарезервированным символом в URI.

Как указано в RFC 3986, раздел 2.3, следующие символы незарезервированы:

  • Символы алфавитно-цифрового формата: A-Z, a-z, 0-9
  • ~, _, -

Примеры

iex> URI.char_unreserved?(?_)
true

decode(uri)

Характеристики

decode(binary()) :: binary()

Декодирует URI.

Примеры

iex> URI.decode("https%3A%2F%2Felixir-lang.org")
"https://elixir-lang.org"

decode_query(query, map \\ %{})

Характеристики

decode_query(binary(), %{optional(binary()) => binary()}) :: %{
  optional(binary()) => binary()
}

Декодирует строку запроса в карту.

Принимая строку запроса в формате 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()

Декодирует string как "x-www-form-urlencoded".

Примеры

iex> URI.decode_www_form("%3Call+in%2F")
"<all in/"

default_port(scheme)

Характеристики

default_port(binary()) :: nil | non_neg_integer()

Возвращает порт по умолчанию для заданного scheme.

Если схема неизвестна модулю 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.

После вызова этой функции port будет возвращаться функцией default_port/1 для данной схемы scheme. Обратите внимание, что эта функция изменяет порт по умолчанию для заданной scheme глобально, то есть для каждого приложения.

Рекомендуется вызывать эту функцию в обратном вызове запуска вашего приложения, если вы хотите зарегистрировать новые URI.

encode(string, predicate \\ &char_unescaped?/1)

Характеристики

encode(binary(), (byte() -> as_boolean(term()))) :: binary()

Экранирует все символы, требующие экранирования, в string.

Это означает, что зарезервированные символы, такие как : и /, и так называемые незарезервированные символы, которые имеют одинаковое значение как в экранированном, так и в неэкранированном виде, по умолчанию не будут экранированы.

См. encode_www_form, если вам необходимо также экранировать зарезервированные символы.

Эта функция также принимает функцию predicate в качестве необязательного аргумента. Если она передана, эта функция будет вызываться с каждым байтом в string в качестве аргумента и должна возвращать истинное значение (любое значение, отличное от false или nil ), если заданный байт должен остаться как есть, или ложное значение (false или nil ), если символ должен быть экранирован.

Примеры

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(Enum.t()) :: binary()

Кодирует перечислимый объект в строку запроса.

Принимает перечислимый объект, который перечисляет как список пар с двумя элементами (например, карту или список ключевых слов) и возвращает строку в формате key1=value1&key2=value2... , где ключи и значения закодированы как URL-строки в соответствии с 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()

Кодирует string как "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("https://elixir-lang.org/")
%URI{
  authority: "elixir-lang.org",
  fragment: nil,
  host: "elixir-lang.org",
  path: "/",
  port: 443,
  query: nil,
  scheme: "https",
  userinfo: nil
}

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"}]

iex> URI.query_decoder("food=bread%26butter&drinks=tap%20water") |> Enum.to_list()
[{"food", "bread&butter"}, {"drinks", "tap water"}]

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"

Обратите внимание, что при создании этого строкового представления значение :authority будет использовано, если :host имеет значение nil. В противном случае будут использованы :userinfo, :host, и :port.

iex> URI.to_string(%URI{authority: "foo@example.com:80"})
"//foo@example.com:80"

iex> URI.to_string(%URI{userinfo: "bar", host: "example.org", port: 81})
"//bar@example.org:81"

iex> URI.to_string(%URI{
...>   authority: "foo@example.com:80",
...>   userinfo: "bar",
...>   host: "example.org",
...>   port: 81
...> })
"//bar@example.org:81"

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.9.4/URI.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API