GoWeb请求的处理方式

1.1获取请求 URL
// 建立一个处理器
//获取请求行里面的信息
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, “已经发送请求地址”, r.URL.Path)
fmt.Fprintln(w, “已经发送请求地址后请求的查询字符串”, r.URL.RawQuery)
//通过 r.URL.RawQuery 得到的是 username=admin&password=123456
//通过 r.URL.RawQuery 得到的是 username=admin&password=123456

}

func main() {

http.HandleFunc("/hello", handler)
http.ListenAndServe(":8080", nil)

}

1.2获取请求头中的信息通过 Request 结果中的 Header 字段用来获取请求头中的所有信息,Header 字段
的类型是 Header 类型,而 Header 类型是一个 map[string][]string,string 类型的 key,string 切片类型的值。大小写是敏感的
// 建立一个处理器
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, “已经发送请求地址”, r.URL.Path)
fmt.Fprintln(w, “已经发送请求地址后请求的查询字符串”, r.URL.RawQuery)
fmt.Fprintln(w, “请求头中所有的信息”, r.Header) //请求头是一个map类型 获取其中的信息要知道key值 可直接获取也可使用Get方法
fmt.Fprintln(w, “请求头中所有的信息“Accept-Encoding””, r.Header[“Accept-Encoding”]) //切片
// 与上面一样
fmt.Fprintln(w, “请求头中所有的信息“Accept-Encoding”的属性值”, r.Header.Get(“Accept-Encoding”)) //值

1.3获取请求体中的信息
请求和响应的主体都是有 Request 结构中的 Body 字段表示,这个字段的类型是
io.ReadCloser 接口,该接口包含了 Reader 接口和 Closer 接口,Reader 接口拥有 Read方法,Closer 接口拥有 Close 方法

// 获取请求体中内容的长度
len := r.ContentLength
// 创建byte切片
body := make([]byte, len)
// 将请求体中的读取到body中
r.Body.Read(body)
// 在浏览器中显示
fmt.Fprintln(w, "请求体中的内容有", string(body))

由于 GET 请求没有请求体,所以我们需要在 HTML 页面中创建一个 form 表单,通
过指定 method=”post”来发送一个 POST 请求

> 用 户 名 :
密 码 :
>

请求体中的内容有: username=admin&password=123456
以上的方式就是为了获取表单提交的信息 用于进行后续的操作
也可以通过Form字段获取表单提交的信息

1.4获取请求参数
下面我们就通过 net/http 库中的 Request 结构的字段以及方法获取请求 URL 后面
的请求参数以及 form 表单中提交的请求参数(先要解析表单 Form中才会有表单数据)
1.4.1 Form 字段
Form 字段只有在调用 Request 的 ParseForm 方法后才有效。在客户端,会忽
略请求中的本字段而使用 Body 替代表单中的请求参数的值排在 URL 请求参数值的前面

1.4.2 PostForm字段 只获取表单中的请求参数
	类型也是 url.Values 类型,用来获取表单中的请求参数
	但是 PostForm 字段只支持 application/x-www-form-urlencoded 编码,如果
	form 表单的 enctype 属性值为 multipart/form-data,那么使用 PostForm 字段
	无法获取表单中的数据,此时需要使用 MultipartForm 字段

	说明:form 表单的 enctype 属性的默认值是 application/x-www-form-
	urlencoded 编 码 , 实 现 上 传 文 件 时 需 要 讲 该 属 性 的 值 设 置 为
	multipart/form-data 编码格式

// 解析表单 在调用r.Form之前必须执行该操作
r.ParseForm()
// 获取请求参数
fmt.Fprintln(w, "请求参数有", r.Form)
fmt.Fprintln(w, "Post请求的Form表单参数有", r.PostForm)

在执行 r.Form 之前一定要调用 ParseForm 方法,上述方法会得到get以及post的所有的提交的参数信息


1.4.3 FormValue 方法和 PostFormValue 方法(这个方法不需要调用r.ParseForm)
	1) FormValue 方法
		a) 可以通过 FormValue 方法快速地获取某一个请求参数,该方法调用之前
		会自动调用 ParseMultipartForm 和 ParseForm 方法对表单进行解析
	2) PostFormValue 方法
		a) 可以通过 PostFormValue 方法快速地获取表单中的某一个请求参数,该
		方法调用之前会自动调用 ParseMultipartForm 和 ParseForm 方法对表单
		进行解析

		fmt.Fprintln(w, "请求参数有:", r.FormValue("username")) //请求参数有: admin

		fmt.Fprintln(w, "Post请求的表单参数有:", r.PostFormValue("username"))//Post请求的表单参数有: admin

1.4.4 MultipartForm 字段
	为了取得 multipart/form-data 编码的表单数据,我们需要用到 Request 结构的
	ParseMultipartForm 方法和 MultipartForm 字段,我们通常上传文件时会将 form 表单的
	enctype 属性值设置为 multipart/form-data

1.5给客户端响应
http.ResponseWriter 来给用户响应

1.5.1给客户端响应一个字符串
func handler(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("你的请求我已经收到"))
	}


1.5.2给客户端响应一个 HTML 页面
func handler(w http.ResponseWriter, r *http.Request) {
	html := `<html>
	<head>
	<title>测试响应内容为网页</title>
	<meta charset="utf-8"/>
	</head>
	<body>
	我是以网页的形式响应过来的!
	</body>
	</html>`
	w.Write([]byte(html))
}

1.5.3给客户端响应 JSON 格式的数据
func handler(w http.ResponseWriter, r *http.Request) {
	//设置响应头中内容的类型
	w.Header().Set("Content-Type", "application/json")
	user := User{
	ID: 1,
	Username: "admin",
	Password: "123456",
	}
	//将 user 转换为 json 格式
	json, _ := json.Marshal(user)
	w.Write(json)
}

1.5.4让客户端重定向
func handler(w http.ResponseWriter, r *http.Request) {
	//以下操作必须要在 WriteHeader 之前进行
	w.Header().Set("Location", "https:www.baidu.com")
	w.WriteHeader(302)
}

//这只是重定向的一种方式 我们都是用模板引擎进行重定向
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值