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中再次附加它