url 的 Gorilla Mux 正则表达式与完整的 url 不匹配
Gorilla Mux Regex for url is not matching the full url
我应该使用什么正则表达式来匹配以下 url 作为 full_path?
https://edition.cnn.com/search\?q\=test\&size\=10\&category\=us,politics,world,opinion,health
(?:www.|http\:\/\/|https\:\/\/).*}
不起作用它只匹配 www.
直到搜索
sm := mux.NewRouter()
sm.HandleFunc("/", getIndex).Methods("GET")
sm.HandleFunc(`/api/v1/hostname/{full_path:(?:www.|http\:\/\/|https\:\/\/).*}`, URLHandler)
更新处理程序为:
func URLHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
url := vars["full_path"]
fmt.Fprintf(w, "Full path is: ", url)
}
编辑 2:
这对我有用
sm := mux.NewRouter().SkipClean(true).UseEncodedPath()
sm.HandleFunc("/", getIndex).Methods("GET")
sm.HandleFunc(`/api/v1/hostname/{full_path:.+`, URLHandler)
在处理程序上,我使用 url.PathUnescape(r.URL.RequestURI())
和 xurls 来提取 url
func URLHandler(w http.ResponseWriter, r *http.Request) {
URL, _ := url.PathUnescape(r.URL.RequestURI())
ext := xurls.Strict().FindAllString(URL, -1)
fmt.Fprintf(w, "Full path is: ", ext)
}
我认为 gorilla mux 只会使用路径部分而不是 URL 的查询字符串。尝试附加 RawQuery
.
像这样:
func URLHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
url := vars["full_path"] + "?"
if r.URL.RawQuery != "" {
url += "?" + r.URL.RawQuery
}
fmt.Fprintf(w, "Full url is: ", url)
}
我应该使用什么正则表达式来匹配以下 url 作为 full_path?
https://edition.cnn.com/search\?q\=test\&size\=10\&category\=us,politics,world,opinion,health
(?:www.|http\:\/\/|https\:\/\/).*}
不起作用它只匹配 www.
直到搜索
sm := mux.NewRouter()
sm.HandleFunc("/", getIndex).Methods("GET")
sm.HandleFunc(`/api/v1/hostname/{full_path:(?:www.|http\:\/\/|https\:\/\/).*}`, URLHandler)
更新处理程序为:
func URLHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
url := vars["full_path"]
fmt.Fprintf(w, "Full path is: ", url)
}
编辑 2:
这对我有用
sm := mux.NewRouter().SkipClean(true).UseEncodedPath()
sm.HandleFunc("/", getIndex).Methods("GET")
sm.HandleFunc(`/api/v1/hostname/{full_path:.+`, URLHandler)
在处理程序上,我使用 url.PathUnescape(r.URL.RequestURI())
和 xurls 来提取 url
func URLHandler(w http.ResponseWriter, r *http.Request) {
URL, _ := url.PathUnescape(r.URL.RequestURI())
ext := xurls.Strict().FindAllString(URL, -1)
fmt.Fprintf(w, "Full path is: ", ext)
}
我认为 gorilla mux 只会使用路径部分而不是 URL 的查询字符串。尝试附加 RawQuery
.
像这样:
func URLHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
url := vars["full_path"] + "?"
if r.URL.RawQuery != "" {
url += "?" + r.URL.RawQuery
}
fmt.Fprintf(w, "Full url is: ", url)
}