在线文档教程

URI

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-urlencode”。

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-urlencode”。

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-urlencode”。

实例

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全球,对每个应用程序都有意义。

建议在应用程序的start回调中调用此函数,以防您要注册新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...key和values按照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

将字符串编码为“x-www-form-urlencode”。

iex> URI.encode_www_form("put: it+й") "put%3A+it%2B%D0%B9"

merge(uri, rel)

merge(t | binary, t | binary) :: t

合并两个城市。

此函数合并两个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"