小言_互联网的博客

GoLang—使用net/http构建Web服务—处理用户请求(上)

301人阅读  评论(0)

一般而言,用户发送的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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场