golang http.request的三个属性Form、PostForm、MultipartForm
Form:存储了post、put和get参数,在使用之前需要调用ParseForm方法。
PostForm:存储了post、put参数,在使用之前需要调用ParseForm方法。
MultipartForm:存储了包含了文件上传的表单的post参数,在使用前需要调用ParseMultipartForm方法。
获取GET参数
r.ParseForm()
if len(r.Form[“id”]) > 0 {
fmt.Fprintln(w, r.Form[“id”][0])
}
其中r表示*http.Request类型,w表示http.ResponseWriter类型。
r.Form是url.Values字典类型,r.Form[“id”]取到的是一个数组类型。因为http.request在解析参数的时候会将同名的参数都放进同一个数组里,所以这里要用[0]获取到第一个。
因为r.Form包含了get和post参数,并且以post参数为先
获取POST参数
这里要分两种情况:
普通的post表单请求,Content-Type=application/x-www-form-urlencoded
有文件上传的表单,Content-Type=multipart/form-data
第一种情况比较简单,直接用PostFormValue就可以取到了。
fmt.Fprintln(w, r.PostFormValue(“id”))
第二种情况复杂一些
因为需要上传文件,所以表单enctype要设置成multipart/form-data。此时无法通过PostFormValue来获取id的值,因为golang库里还未实现这个方法:
golang中可以提供了另外一个属性MultipartForm来处理这种情况。
r.ParseMultipartForm(32 « 20)
if r.MultipartForm != nil {
values := r.MultipartForm.Value[“id”]
if len(values) > 0 {
fmt.Fprintln(w, values[0])
}
}