一般而言,用户发送的HTTP请求主要分为GET请求和POST请求,如果Web服务是使用net/http开发,那么如何接收和处理用户的HTTP请求呢?本文将会简单讲述如何使用net/http接收和处理用户的HTTP请求。
如果了解标准库net/http的使用方法都知道,路由的处理函数设有两个参数,分别为w http.ResponseWriter和r *http.Request。参数w是http.ResponseWriter类型,代表用户的响应对象;参数r是http.Request,代表用户的请求信息。因此,用户的所有请求信息都来自参数r,接下来将深入讲述参数r的使用方法,我们直接上代码,如下所示。
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func body(w http.ResponseWriter, r *http.Request) {
// 获取请求头信息:r.Header
// 获取请求头的某条信息:h := r.Header["Accept-Encoding"]或h := r.Header.Get("Accept-Encoding")
// 判断请求方式
if r.Method == "GET"{
// 方法1:获取GET请求的请求参数,接收application/x-www-form-urlencoded编码的数据
//r.ParseForm()
//fmt.Println(r.Form["name"])
// 方法2:获取GET请求的请求参数,接收application/x-www-form-urlencoded编码的数据
fmt.Println(r.URL.Query())
// 方法3:获取GET请求的请求参数,接收application/x-www-form-urlencoded编码的数据。
fmt.Println(r.FormValue("name"))
// 响应内容
fmt.Fprintln(w, r.FormValue("name"))
} else {
// 方法1:获取POST请求的请求参数
// 分别使用Form和PostForm方法获取POST的请求参数
// 使用Form和PostForm之前必须调用ParseForm方法
// 接收application/x-www-form-urlencoded编码的数据
//r.ParseForm()
//fmt.Println(r.Form["name"][0])
//fmt.Println(r.PostForm["name"][0])
// MultipartForm用于文件上传,使用前需要调用ParseMultipartForm方法
// 接收multipart/form-data编码
// 注意:FormFile是MultipartForm的简化功能
//r.ParseMultipartForm(1024)
//fmt.Println(r.MultipartForm)
// 方法2:获取POST请求的请求参数,但无法获取Multipart编码,即无法读取文件上存的数据
// FormValue将Form的功能简化,接收application/x-www-form-urlencoded编码的数据
// 注意:PostFormValue将PostForm的功能简化,接收application/x-www-form-urlencoded编码的数据
fmt.Println(r.FormValue("name"))
// 方法3:接收POST的JSON数据,因为JSON数据使用application/json编码
con, _ := ioutil.ReadAll(r.Body)
fmt.Println(string(con))
// 响应内容
fmt.Fprintln(w, r.FormValue("name"))
}
}
func main() {
server := http.Server{
Addr: "127.0.0.1:8000",
}
// 定义路由与路由的处理函数body
http.HandleFunc("/", body)
// 运行服务
server.ListenAndServe()
}
从上述代码看到,我们分别获取用户的请求头和请求参数,这两个数据是日常开发中最为常用的。请求头由参数r调用Header方法即可;请求参数则由参数r调用Form、PostForm、FormValue、PostFormValue、MultipartForm和FormFile方法获取参数值,每一种方法有特定的使用场景,说明如下。
- Form:存储了post、put和get的请求参数,在使用之前需要调用ParseForm方法,接收application/x-www-form-urlencoded编码的请求参数。
- FormValue:简化Form的使用方式,无需调用ParseForm或ParseMultipartForm方法。
- PostForm:存储了post、put的请求参数,在使用之前需要调用ParseForm方法,接收application/x-www-form-urlencoded编码的请求参数。
- PostFormValue:简化PostForm的使用方式,无需调用ParseForm或ParseMultipartForm方法。
- MultipartForm:存储了包含了文件上传的表单的post请求的请求参数,在使用前需要调用ParseMultipartForm方法,接收multipart/form-data编码的请求参数。
- FormFile:简化MultipartForm的使用方法,无需调用ParseForm或ParseMultipartForm方法。
综合上述,本文简单讲述如何使用net/http接收和处理用户的HTTP请求,下一节将讲述如何生成响应内容和使用Cookie。
转载:https://blog.csdn.net/HuangZhang_123/article/details/101025831
查看评论