使用 uri 将 URI 编码为字符串
任务
Web 编程 / URL 和 URI 处理 / 将 URI 编码为字符串
使用的 Opam 包
- uri 测试版本:4.2.0 — 使用的库:uri
代码
为了编码 URI,我们使用 Uri.make
函数,其参数都是可选的(除了最后的 ()
)。
let uri =
Uri.make
~scheme:"https"
~userinfo:"login:password"
~host:"ocaml.org"
~port:8080
~path:"/search"
~query:["param1",["a";"b"];"param2",["déjà "]]
~fragment:"anchor"
()
let () =
assert (Uri.to_string uri
= "https://login:[email protected]:8080/search?param1=a,b¶m2=d%C3%A9j%C3%A0%20#anchor")
另一种方法是从已知的 URI 开始,并更改其某些组件。
以下函数可用:with_scheme
、with_userinfo
、with_password
、with_port
、with_path
、with_query
和 with_fragment
。
除了 with_path
和 with_query
之外,所有这些函数都采用 option
类型参数,以便允许从 URI 中删除该特定组件。
注意:这些函数的第一个参数是要修改的 URI,第二个参数包含相应字段的新值。
let uri = Uri.of_string "https://ocaml.org.cn/"
let uri' = uri
|> Fun.flip Uri.with_path "/search"
|> Fun.flip Uri.with_port (Some 8080)
|> Fun.flip Uri.with_userinfo (Some "user:password")
|> Fun.flip Uri.with_query ["param1", ["42"]]
我们还可以逐个或从列表中添加参数
let uri'' = Uri.add_query_param uri' ("param2",["**"])
let uri''' = Uri.add_query_params uri'' ["param3",["?"];"param4",["&"]]