一、基本介绍
Go语言的net/http包提供了一系列用于表示HTTP报文的结构,我们可以使用它处理请求和发送相应,其中Request结构代表了客户端发送的请求报文,下面让我们看一下Request结构体
二、获取请求URL
Request结构中的URL字段用于表示请求行中包含的URL,改字段是一个指向url.URL结构的指针,让我们来看一下URL结构
1、Path字段
获取请求的URL
例如:http://localhost:8080/hello?username=admin&password=123456
通过r.URL.Path只能得到 /hello
2、 RawQuery字段
获取请求的URL后面?后面的查询字符串
例如:http://localhost:8080/hello?username=admin&password=123456
通过 r.URL.RawQuery 得到的是username=admin&password=123456
3、案例演示:
package utils
import (
"fmt"
"net/http"
)
func handlerURL(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "发送请求的请求地址是:", r.URL.Path)
fmt.Fprintln(w, "发送请求的请求地址的查询字符串是:", r.URL.RawQuery)
}
func URLDemo() {
http.HandleFunc("/url", handlerURL)
http.ListenAndServe(":8080", nil)
}
三、获取请求头中的信息
通过Request结果中的Header字段用来获取请求头中的所有信息,Header字段的类型是Header类型,而Header类型是一个map[string][]string,string类型的key,string切片类型的值。下面是Header类型及它的方法:
1、获取请求头中的所有信息
r.Header
得到的结果如下:、
map[User-Agent:[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36] Accept:[text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8] Accept-Encoding:[gzip, deflate, br] Accept-Language:[zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7] Connection:[keep-alive] Upgrade-Insecure-Requests:[1]]
2、获取请求头中的某个具体属性的值,如获取Accept-Encoding的值
方式一:r.Header[“Accept-Encoding”]
i. 得到的是一个字符串切片
ii. 结果
[gzip, deflate, br]
方式二:r.Header.Get(“Accept-Encoding”)
i. 得到的是字符串形式的值,多个值使用逗号分隔
ii. 结果
gzip, deflate, br
3、案例演示:
package utils
import (
"fmt"
"net/http"
)
func handlerHeader(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "发送请求的请求头信息:", r.Header)
fmt.Fprintln(w, "请求头中Accept-Encoding的信息是:", r.Header["Accept-Encoding"])
fmt.Fprintln(w, "请求头中Accept-Encoding的属性值是:", r.Header.Get("Accept-Encoding"))
}
func HeaderDemo() {
http.HandleFunc("/header", handlerHeader)
http.ListenAndServe(":8080", nil)
}
四、获取请求体中的信息
请求和响应的主体都是有Request结构中的Body字段表示,这个字段的类型是io.ReadCloser接口,该接口包含了Reader接口和Closer接口,Reader接口拥有Read方法,Closer接口拥有Close方法
1、 由于GET请求没有请求体,所以我们需要在HTML页面中创建一个form表单,通过指定