如何将url编码的url作为参数发送到mux?

时间:2018-03-09 09:46:47

标签: go mux

我有这段代码

func main() {
  router := mux.NewRouter()
  router.HandleFunc("/", rootHandler)
  router.HandleFunc("/xyz/{url}", urlHandler)
  http.Handle("/", router)

  log.Fatal(http.ListenAndServe(":8080", nil))
}

使用此网址:http://localhost:8080/xyz/https%3A%2F%2Fabc.no%2FJZ2las1o3Ct 多路复用器将重定向(301) http://localhost:8080/xyz/https:/abc.no/JZ2las1o3Ct

如果我将%2F%2F更改为仅一个(%2F),我就不会被重定向,并且转义字符会被转义。

我找到了对router.SkipClean(true)的引用,但它对Mux如何处理这个没有任何区别。

我想要的是,mux变量url应该包含https%3A%2F%2Fabc.no%2FJZ2las1o3Ct

2 个答案:

答案 0 :(得分:0)

您在这里寻找的是UseEncodedPath设置。

https://godoc.org/github.com/gorilla/mux#Router.UseEncodedPath

mux中的默认行为是解码URL,然后进行路径匹配。

如果打开UseEncodedPath,它将不会解码path参数,并且当您访问处理程序内部的path参数时,它将仍然被编码。

此时,您可以使用go QueryUnescape函数选择是否要解码参数。

答案 1 :(得分:-1)

您可以使用QueryUnescape删除空格和其他网址编码参数。 请查找function

https://golang.org/pkg/net/url/#QueryUnescape