Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何将url编码的url作为参数发送到mux?_Go_Mux - Fatal编程技术网

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

Go 如何将url编码的url作为参数发送到mux?,go,mux,Go,Mux,我有这个密码 func main() { router := mux.NewRouter() router.HandleFunc("/", rootHandler) router.HandleFunc("/xyz/{url}", urlHandler) http.Handle("/", router) log.Fatal(http.ListenAndServe(":8080", nil)) } 使用此url:http://localhost:8080/xyz/https%

我有这个密码

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

  log.Fatal(http.ListenAndServe(":8080", nil))
}
使用此url:
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。没有%2FJZ2las1o3Ct

您可以使用
QueryUnescape
删除空格和其他url编码参数。 请找一下电话号码


您在这里寻找的是
useCodedPath
设置

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

如果启用UseEncodedPath,它将不会解码path参数,并且当您访问处理程序中的path参数时,它仍将被编码


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

您可以使用查询参数而不是动态路径段。解码url编码的参数并在mux中使用它来设置整个url,或者如果您希望它是路径段,你为什么不对它进行base64编码并重新解码呢?你好@Vedhavayas我也说过同样的话url已经结束编码了,所以我们只需要对它进行解码。@mkopriva我正在重写一个现有的服务,因此,我无法更改路径我如何在mux路由器处理url之前取消对其路径的一部分进行扫描?您可以首先解析url并将其用作查询参数,而不是mux处理的url的一部分。你需要先将url拆分,然后使用它来将其分离。但是在路由器找到命中之前,我如何解析url呢?路由器的作用是确定什么函数应该处理路径。使用mux子程序。当遇到第二个http时,无法拆分字符串,然后解析它并在mux中再次附加它