在Go的http包中,如何在POST请求中获取查询string?

我使用来自Go的http包来处理POST请求。 如何从Request对象访问和分析查询string的内容? 我找不到正式文件的答案。

QueryString 根据定义在URL中。 您可以使用req.URL ( doc )访问请求的URL。 URL对象有一个Query()方法( doc ),它返回一个Valuestypes,它只是QueryString参数的一个map[string][]string

如果你正在寻找的是由HTML表单提交的POST数据,那么这通常是请求主体中的键值对。 在答案中,您可以调用ParseForm() ,然后使用req.Form字段获取键值对的映射,但您也可以调用FormValue(key)以获取特定键的值。 这需要时调用ParseForm() ,并获取值,不pipe它们是如何被发送的(即在查询string中或在请求体中)。

如果对追随者有用,下面是一个更具体的如何访问GET参数的例子(基本上,Request对象有一个方法可以为你parsing它们,叫做Query ):

假设请求URL如http:// host:port / something?param1 = b

 func newHandler(w http.ResponseWriter, r *http.Request) { fmt.Println("GET params were:", r.URL.Query()); // if only one expected param1 := r.URL.Query().Get("param1") if param1 != "" { // ... process it, will be the first (only) if multiple were given // note: if they pass in like ?param1=&param2= param1 will also be "" :| } // if multiples possible, or to process empty values like param1 in // ?param1=&param2=something param1s := r.URL.Query()["param1"]; if param1s != nil { // ... process them ... or you could just iterate over them without a nil check // [if none were present, will be a nil array, which golang treats as an empty array] // this way you can also tell if they passed in the parameter as the empty string // it will be an element of the array that is the empty string } } 

还要注意“值映射中的键[即Query()返回值]区分大小写”。

下面是一个例子:

 value := FormValue("field") 

获取更多信息。 关于http包,你可以在这里访问它的文档。 FormValue基本上按顺序返回POST或PUT值或GET值,第一个是find的值。

下面的话来自官方文件。

表单包含parsing的表单数据,包括URL字段的查询参数POST或PUT表单数据 。 该字段仅在调用ParseForm后才可用。

所以,下面的示例代码将起作用。

 func parseRequest(req *http.Request) error { var err error if err = req.ParseForm(); err != nil { log.Error("Error parsing form: %s", err) return err } _ = req.Form.Get("xxx") return nil } 

这是一个简单的工作示例:

 package main import ( "io" "net/http" ) func queryParamDisplayHandler(res http.ResponseWriter, req *http.Request) { io.WriteString(res, "name: "+req.FormValue("name")) io.WriteString(res, "\nphone: "+req.FormValue("phone")) } func main() { http.HandleFunc("/example", func(res http.ResponseWriter, req *http.Request) { queryParamDisplayHandler(res, req) }) println("Enter this in your browser: http://localhost:8080/example?name=jenny&phone=867-5309") http.ListenAndServe(":8080", nil) } 

在这里输入图像说明