发送GET
请求,并打印出返回值
if r, err := g.Client().Get("https://goframe.org"); err != nil {
panic(err)
} else {
defer r.Close()
fmt.Println(r.ReadAllString())
}
发送GET
请求,下载远程文件
if r, err := g.Client().Get("https://goframe.org/cover.png"); err != nil {
panic(err)
} else {
defer r.Close()
gfile.PutBytes("/Users/john/Temp/cover.png", r.ReadAll())
}
下载文件操作,小文件下载非常简单。需要注意的是,如果远程文件比较大时,服务端会分批返回数据,因此会需要客户端发多个GET
请求,每一次通过Header
来请求分批的文件范围长度,感兴趣的同学可自行研究相关细节。
发送POST
请求,并打印出返回值
if r, err := g.Client().Post("http://127.0.0.1:8199/form", "name=john&age=18"); err != nil {
panic(err)
} else {
defer r.Close()
fmt.Println(r.ReadAllString())
}
传递多参数的时候用户可以使用&
符号进行连接,注意参数值往往需要通过gurl.Encode
编码一下。
发送POST
请求,参数为map
类型,并打印出返回值
if r, err := g.Client().Post(
"http://127.0.0.1:8199/form",
g.Map{
"submit" : "1",
"callback" : "http://127.0.0.1/callback?url=http://baidu.com",
}
)); err != nil {
panic(err)
} else {
defer r.Close()
fmt.Println(r.ReadAllString())
}
传递多参数的时候用户可以使用&
符号进行连接,也可以直接使用map
(其实之前也提到,任意数据类型都支持,包括struct
)。
发送POST
请求,参数为JSON
数据,并打印出返回值
if r, err := g.Client().Post(
"http://user.svc/v1/user/create",
`{"passport":"john","password":"123456","password-confirm":"123456"}`,
); err != nil {
panic(err)
} else {
defer r.Close()
fmt.Println(r.ReadAllString())
}
可以看到,通过ghttp
客户端发送JSON
数据请求非常方便,直接通过Post
方法提交即可,客户端会自动将请求的Content-Type
设置为application/json
。
发送DELETE
请求,并打印出返回值
if r, err := g.Client().Delete("http://user.svc/v1/user/delete/1", "10000"); err != nil {
panic(err)
} else {
defer r.Close()
fmt.Println(r.ReadAllString())
}
6 Comments
harry
示例中使用g.Map 作为post参数,服务端接受到的为 "Content-Type":["application/x-www-form-urlencoded"]
这里要如何将其设置为json类型呢?
发现设置header并未生效
郭强
请查看章节:HTTPClient-链式操作
harry
原来要链式操作
LeeEcho
使用g.Client() post提交并设置了cookie,,postman模拟post提交也设置了cookie头参数,两种方式调用返回结果不一致。。。不知道是不是我操作有什么问题。。。。
海亮
那么你是不是应该写出你是怎么操作的?
ghttp.Client是怎么使用的?
postman是怎么使用的?
LeeEcho
谢谢,已解决,请求的接口有一个302跳转导致cookie丢失。
参考链接:https://colobu.com/2017/04/19/go-http-redirect/