url 的 Gorilla Mux 正则表达式与完整的 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)

}


扬帆大鱼
浏览 215回答 1
1回答

墨色风雨

我认为 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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go