代码示例:

GET&POST列子:
net/http包没有封装直接使用请求带header的get或者post方法,所以,要想请求中带header或设置cookie(下面列子中有设置cookie的方法),只能使用NewRequest方法(使用该方法时需要先对client实例化:client := &http.Client{})
import (
	"net/http"
	"json"
	"ioutil"
)
type Student struct{
	id string
	name string
}

type StudentReq struct{
	id string
	name string
}
func main() {
	stu := Student{
		id:"2ed4tg5fe35fgty3yy6uh",
		name:"amber",
	}
	stu,err := json.Marshal(&stu)
	reader := bytes.NewReader(stu)
	request,err := http.NewRequest("POST", "http://192.168.1.12:8000/create", reader)
	request.Header.Set("Content-Type", "application/json")
	client:=&http.Client{}
	response,err := client.Do(request)
	defer response.Body.Close()
	body,err := ioutil.ReadAll(response.Body)
	fmt.Printf(string(body))
	
	var stuReq StudentReq 
	err = json.UnMarshal(body, &stuReq)
	fmt.Println(json.MarshalIndent(stuReq))
}

  • stu,err := json.Marshal(&stu):将stu对象改为json格式
  • reader := bytes.NewReader(stu):所以将json改为byte格式,作为body传给http请求
  • request,err := http.NewRequest(“POST”, “http://192.168.1.12:8000/create”, reader):创建url>
  • response,err := client.Do(request):客户端发起请求,接收返回值
  • body,err := ioutil.ReadAll(response.Body):读取body的值,返回类型是byte
  • json.MarshalIndent(stuReq):修改json为标准格式
http.Clicent:是一个HTTP客户端,客户机比往返器(比如传输)更高级,还处理HTTP细节,比如cookie,重定向,长连接。
func httpDo() {
// http.Clicent:是一个HTTP客户端,客户机比往返器(比如传输)更高级,还处理HTTP细节,比如cookie,重定向,长连接。
    client := &http.Client{}
 // 使用 NewRequest 设置头参数、cookie之类的数据,
     req, err := http.NewRequest("POST", "http://www.01happy.com/demo/accept.php", strings.NewReader("name=cjb"))
    if err != nil {
        // handle error
    }

    req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
    req.Header.Set("Cookie", "name=anny")

    resp, err := client.Do(req)

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        // handle error
    }

    fmt.Println(string(body))
}

未完待续~