我正在使用httpGo 中的包来处理 POST 请求。如何从Request对象访问和解析查询字符串的内容?我无法从官方文档中找到答案。
http
Request
根据定义,QueryString位于 URL 中。您可以使用doc访问请求的 URL 。URL 对象有一个Query()方法 ( doc,它返回一个Values类型,它只是map[string][]stringQueryString 参数的一个。
Query()
Values
map[string][]string
如果您要查找的是由 HTML 表单提交的 POST 数据,那么这(通常)是请求正文中的键值对。您的答案是正确的,您可以调用ParseForm()然后使用req.Formfield 来获取键值对的映射,但是您也可以调用FormValue(key)来获取特定键的值。ParseForm()如果需要,它会调用,并获取值而不管它们是如何发送的(即在查询字符串中或在请求正文中)。
ParseForm()
req.Form
FormValue(key)
下面是一个更具体的示例,说明如何访问 GET 参数。该Request对象有一个为您解析它们的方法,称为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=¶m2= param1 will also be "" :| } // if multiples possible, or to process empty values like param1 in // ?param1=¶m2=something param1s := r.URL.Query()["param1"] if len(param1s) > 0 { // ... process them ... or you could just iterate over them without a check // 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() 返回值] 区分大小写。”