golang基础-http请求的几种方式


简单粗暴,直接上代码

发送get请求


func main() {
	http.HandleFunc("/test1",test1)

	http.HandleFunc("/t_test1",t_test1)

	http.ListenAndServe("0.0.0.0:9999",nil)
}

func t_test1(res http.ResponseWriter,req *http.Request)  {
	//构造URL
	sendUrl,_:=url.Parse("http://localhost:9999/test1?")
	//添加Values键值对
	val:=sendUrl.Query()
	val.Set("name","safly")
	val.Add("name","saflyer")
	val.Set("sex","man")
	//添加RawQuery
	sendUrl.RawQuery = val.Encode()
	//发起请求
	resp,err:=http.Get(sendUrl.String())
	if err != nil || resp.StatusCode != http.StatusOK{
		fmt.Println("get fail:", err)
		return
	}

	defer resp.Body.Close()

	//读取响应
	body,err:=ioutil.ReadAll(resp.Body)
	if err!= nil{
		fmt.Println("read body fail")
		return
	}
	fmt.Println(string(body))
}


func test1(res http.ResponseWriter,req *http.Request)  {
	req.ParseForm()
	for k,v:=range  req.Form{
		fmt.Print(k,v)
	}
	fmt.Fprint(res, "It works")
}

通过curl -X GET 'http://localhost:9999/t_test1'执行请求测试,输出如下:

name[safly saflyer]sex[man]It works

解析post的方式解析json对象

func main() {
	http.HandleFunc("/post",post)
	http.HandleFunc("/t_post",t_post)
	http.ListenAndServe("0.0.0.0:9999",nil)
}

func t_post(res http.ResponseWriter,req *http.Request)  {
	//构造URL
	sendUrl:="http://localhost:9999/post?"
	user:= struct {
		Name string
		Sex string
	}{"safly","man"}

	body,_:=json.Marshal(user)
	resp,_:= http.Post(sendUrl,"application/x-www-form-urlencoded",strings.NewReader(string(body)))
	//解析响应数据
	defer resp.Body.Close()
	b,_:= ioutil.ReadAll(resp.Body)
	fmt.Println(string(b))
}

func post(res http.ResponseWriter,req *http.Request)  {
	//读取body
	body,_:= ioutil.ReadAll(req.Body)
	strBody:= string(body)
	fmt.Println("bodyStr",strBody)
	userT:= struct {
		Name string
		Sex string
	}{}
	json.Unmarshal(body,&userT)

	fmt.Fprint(res,userT.Name,userT.Sex)
}

通过curl -X POST 'http://localhost:9999/t_post'执行请求测试,输出如下:

bodyStr {"Name":"safly","Sex":"man"}
saflyman

解析以表单的方式提交postform数据

func main() {
	http.HandleFunc("/post",post)

	http.HandleFunc("/t_post",t_post)

	http.ListenAndServe("0.0.0.0:9999",nil)
}

func post(w http.ResponseWriter,r *http.Request) {
	r.ParseForm()
	fmt.Println(r.Form["name"])
	fmt.Println(r.Form["sex"])

	//返回数据
	fmt.Fprint(w, "Post is works")
}


func t_post(res http.ResponseWriter,req *http.Request)  {
	u, err := url.Parse("http://localhost:9999/post?")
	if err != nil {
		fmt.Println("parse is fail")
		return
	}
	q := u.Query()
	q.Set("name", "salfy")
	q.Add("name","saflyer")
	q.Set("sex", "男")
	//发起post表单请求
	resp, err1 := http.PostForm(u.String(), q)
	if err1 != nil {
		fmt.Println("post fail")
		return
	}
	//解析响应
	defer resp.Body.Close()
	body, err2 := ioutil.ReadAll(resp.Body)
	if err2 != nil{
		fmt.Println("body fail")
		return
	}
	fmt.Println(string(body))
}

通过curl -X POST 'http://localhost:9999/t_post'执行请求测试,输出如下:

[salfy saflyer]
[男]
Post is works
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页