代码示例:
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))
}
未完待续~