如何从 URL 中读取多个参数

我有一个反向代理 API,它读取 localhost API 调用的参数,然后将这些参数发送到第 3 方 API。


如果我只使用一个参数,我就能让它正常工作。像这样:


http://localhost:8080/path?page=1


我希望能够使用多个参数,但是像这样:


http://localhost:8080/path?page=1&param=x


请参阅下面的代码:此函数捕获 HTTP 请求,然后将这些参数发送到另一个 API。


func (s *Server) getReverseProxy(w http.ResponseWriter, r *http.Request) {

    // when I try to append another query in the list a long with page, I get an error 

    keys, ok := r.URL.Query()["page"]


    if !ok || len(keys[0]) < 1 {

        log.Println("Url Param 'page' is missing")

        return

    }


    // Query()["key"] will return an array of items,

    // we only want the single item.

    key := keys[0]


    log.Println("Url Param 'page' is: " + string(key))

    params := url.Values{

        "page[size]":   []string{"100"},

        "page[number]": []string{""},

    }

    u := &url.URL{

        Scheme:   "https",

        Host:     "url.com",

        Path:     "/path",

        RawQuery: params.Encode(),

    }

}

无需折射,我在这里错过了一些简单的东西吗?如何为我的函数添加另一个参数来捕获?


墨色风雨
浏览 155回答 2
2回答

慕田峪4524236

下面的代码行...keys, ok := r.URL.Query()["page"]它返回的参数值page,但在[]string类型。要检索更多参数,只需添加具有不同参数名称的类似语句。例如:keysPage, ok := r.URL.Query()["page"]keysParamA, ok := r.URL.Query()["ParamA"]keysParamB, ok := r.URL.Query()["ParamB"]keysParamC, ok := r.URL.Query()["ParamC"]或者,您也可以使用r.URL.Query().Get(key)返回string类型中的参数值。page := r.URL.Query().Get("page")paramA := r.URL.Query().Get("ParamA")paramB := r.URL.Query().Get("ParamB")paramC := r.URL.Query().Get("ParamC")

湖上湖

r.URL.Query()返回一个map[string][]string你可以做一个keys, ok := r.URL.Query()//browse through keys bykeys["params"]keys["page"]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go