【问题标题】:Gorilla Mux Regex for url is not matching the full urlurl 的 Gorilla Mux 正则表达式与完整的 url 不匹配
【发布时间】:2020-06-06 09:18:22
【问题描述】:

我应该使用什么正则表达式来匹配以下 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)
}

EDIT2:

这对我有用

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 来提取网址

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)
}

【问题讨论】:

  • URL 是一个路径组件。这意味着它将充满转义字符,并且您编写的任何正则表达式都必须与转义字符匹配。作为替代方案,您可以简单地在路径中使用 {full_path} 并自己解析 URL 以确保它是有效的。
  • 我试过 {full_path} 但它没有输出任何东西
  • 怎么样?显示处理程序代码。另外,说明你是怎么称呼它的
  • 我添加了处理程序
  • 你是如何注册路径的?你怎么称呼它?

标签: go gorilla mux


【解决方案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)
}

【讨论】:

    猜你喜欢
    • 2020-08-19
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多