首页 文章资讯内容详情

golang常用的http请求操作

2026-06-01 2 花语

之前用python写各种网络请求的时候写的非常顺手,但是当打算用golang写的时候才发现相对来说还是python的那种方式用的更加顺手,习惯golang的用法之后也就差别不大了,下面主要整理了常用的通过golang发起的GET请求以及POST请求的代码例子

golang发起GET请求

基本的GET请求

//基本的GET请求 packagemain import( "fmt" "io/ioutil" "net/http" ) funcmain(){ resp,err:=http.Get("http://httpbin.org/get") iferr!=nil{ fmt.Println(err) return } deferresp.Body.Close() body,err:=ioutil.ReadAll(resp.Body) fmt.Println(string(body)) fmt.Println(resp.StatusCode) ifresp.StatusCode==200{ fmt.Println("ok") } }

带参数的Get请求

packagemain import( "fmt" "io/ioutil" "net/http" ) funcmain(){ resp,err:=http.Get("http://httpbin.org/get?name=zhaofan&age=23") iferr!=nil{ fmt.Println(err) return } deferresp.Body.Close() body,_:=ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }

但是如果我们想要把一些参数做成变量而不是直接放到url中怎么操作,代码例子如下:

packagemain import( "fmt" "io/ioutil" "net/http" "net/url" ) funcmain(){ params:=url.Values{} Url,err:=url.Parse("http://httpbin.org/get") iferr!=nil{ return } params.Set("name","zhaofan") params.Set("age","23") //如果参数中有中文参数,这个方法会进行URLEncode Url.RawQuery=params.Encode() urlPath:=Url.String() fmt.Println(urlPath)//https://httpbin.org/get?age=23&name=zhaofan resp,err:=http.Get(urlPath) deferresp.Body.Close() body,_:=ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }

解析JSON类型的返回结果

packagemain import( "encoding/json" "fmt" "io/ioutil" "net/http" ) typeresultstruct{ Argsstring`json:"args"` Headersmap[string]string`json:"headers"` Originstring`json:"origin"` Urlstring`json:"url"` } funcmain(){ resp,err:=http.Get("http://httpbin.org/get") iferr!=nil{ return } deferresp.Body.Close() body,_:=ioutil.ReadAll(resp.Body) fmt.Println(string(body)) varresresult _=json.Unmarshal(body,&res) fmt.Printf("%#v",res) }

GET请求添加请求头

packagemain import( "fmt" "io/ioutil" "net/http" ) funcmain(){ client:=&http.Client{} req,_:=http.NewRequest("GET","http://httpbin.org/get",nil) req.Header.Add("name","zhaofan") req.Header.Add("age","3") resp,_:=client.Do(req) body,_:=ioutil.ReadAll(resp.Body) fmt.Printf(string(body)) }

从上述的结果可以看出我们设置的头是成功了:

{ "args":{}, "headers":{ "Accept-Encoding":"gzip", "Age":"3", "Host":"httpbin.org", "Name":"zhaofan", "User-Agent":"Go-http-client/1.1" }, "origin":"211.138.20.170,211.138.20.170", "url":"https://httpbin.org/get" }

golang发起POST请求

基本的POST使用

packagemain import( "fmt" "io/ioutil" "net/http" "net/url" ) funcmain(){ urlValues:=url.Values{} urlValues.Add("name","zhaofan") urlValues.Add("age","22") resp,_:=http.PostForm("http://httpbin.org/post",urlValues) body,_:=ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }

结果如下:

{ "args":{}, "data":"", "files":{}, "form":{ "age":"22", "name":"zhaofan" }, "headers":{ "Accept-Encoding":"gzip", "Content-Length":"19", "Content-Type":"application/x-www-form-urlencoded", "Host":"httpbin.org", "User-Agent":"Go-http-client/1.1" }, "json":null, "origin":"211.138.20.170,211.138.20.170", "url":"https://httpbin.org/post" }

另外一种方式

packagemain import( "fmt" "io/ioutil" "net/http" "net/url" "strings" ) funcmain(){ urlValues:=url.Values{ "name":{"zhaofan"}, "age":{"23"}, } reqBody:=urlValues.Encode() resp,_:=http.Post("http://httpbin.org/post","text/html",strings.NewReader(reqBody)) body,_:=ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }

结果如下:

{ "args":{}, "data":"age=23&name=zhaofan", "files":{}, "form":{}, "headers":{ "Accept-Encoding":"gzip", "Content-Length":"19", "Content-Type":"text/html", "Host":"httpbin.org", "User-Agent":"Go-http-client/1.1" }, "json":null, "origin":"211.138.20.170,211.138.20.170", "url":"https://httpbin.org/post" }

发送JSON数据的post请求

packagemain import( "bytes" "encoding/json" "fmt" "io/ioutil" "net/http" ) funcmain(){ client:=&http.Client{} data:=make(map[string]interface{}) data["name"]="zhaofan" data["age"]="23" bytesData,_:=json.Marshal(data) req,_:=http.NewRequest("POST","http://httpbin.org/post",bytes.NewReader(bytesData)) resp,_:=client.Do(req) body,_:=ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }

结果如下:

{ "args":{}, "data":"{\"age\":\"23\",\"name\":\"zhaofan\"}", "files":{}, "form":{}, "headers":{ "Accept-Encoding":"gzip", "Content-Length":"29", "Host":"httpbin.org", "User-Agent":"Go-http-client/1.1" }, "json":{ "age":"23", "name":"zhaofan" }, "origin":"211.138.20.170,211.138.20.170", "url":"https://httpbin.org/post" }

不用client的post请求

packagemain import( "bytes" "encoding/json" "fmt" "io/ioutil" "net/http" ) funcmain(){ data:=make(map[string]interface{}) data["name"]="zhaofan" data["age"]="23" bytesData,_:=json.Marshal(data) resp,_:=http.Post("http://httpbin.org/post","application/json",bytes.NewReader(bytesData)) body,_:=ioutil.ReadAll(resp.Body) fmt.Println(string(body)) } 原文链接: