使用 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&param2=d%C3%A9j%C3%A0%20#anchor")

另一种方法是从已知的 URI 开始,并更改其某些组件。

以下函数可用:with_schemewith_userinfowith_passwordwith_portwith_pathwith_querywith_fragment

除了 with_pathwith_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",["&"]]

食谱不起作用?注释不清楚或已过时?

打开一个问题为这个食谱做出贡献