持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
restgo
restgo
restgo
go get github.com/xiao-ren-wu/restgo
先来个简单的,构建一个GET请求
func TestGet(t *testing.T) {
resp, err := restgo.NewHttpBuilder().Send(restgo.GET, "http://www.baidu.com")
if err != nil {
t.Fatal(err)
}
t.Log(resp.BodyStr())
}
respWrappererror
BodyStrstringBody[]byteBodyUnmarshalHeader
请求生成Curl
restgo
生成Curl的函数签名如下
func (builder *httpBuilder) Curl(curlConsumer func(curl string)) *httpBuilder {
builder.curlConsumerFunc = curlConsumer
return builder
}
restgo
var ConsolePrint = func(curl string) {
fmt.Println(curl)
}
可以使用默认的控制台打印
func TestGet(t *testing.T) {
resp, err := restgo.NewHttpBuilder().
Curl(restgo.ConsolePrint).
Send(restgo.GET, "http://restgo.example.com")
if err != nil {
t.Fatal(err)
}
t.Log(resp.BodyStr())
}
程序运行后,控制台打印curl信息
curl --location --request GET 'http://www.baidu.com'
url拼接参数
假设获取用户信息需要传入id,并通过路径拼接的形式
func Test(t *testing.T) {
resp, err := restgo.NewHttpBuilder().
Query(map[string]string{
"id": "1234",
}).
Send(restgo.GET, "http://restgo.example.com")
if err != nil {
t.Fatal(err)
}
t.Log(resp.BodyStr())
}
路径参数
假设可以通过username获取用户信息,并在通过路径拼接的形式
func Test(t *testing.T) {
resp, err := restgo.NewHttpBuilder().
PathVariable(map[string]string{
"name": "1234",
}).
Send(restgo.GET, "http://restgo.example.com/:name/detail")
if err != nil {
t.Fatal(err)
}
t.Log(resp.BodyStr())
}
设置请求头信息
假设请求接口需要传入token认证
func Test(t *testing.T) {
resp, err := restgo.NewHttpBuilder().
Headers(map[string]string{
"token": "xxxx",
}).
Send(restgo.GET, "http://restgo.example.com")
if err != nil {
t.Fatal(err)
}
t.Log(resp.BodyStr())
}
发送POST请求
表单请求
application/jsonContent-Typemultipart/form-dataapplication/x-www-form-urlencoded
func Test(t *testing.T) {
resp, err := restgo.NewHttpBuilder().
ContentType(restgo.FormData).
Payload(map[string]string{
"name": "1234",
}).
Send(restgo.GET, "http://restgo.example.com")
if err != nil {
t.Fatal(err)
}
t.Log(resp.BodyStr())
}
试试上传文件
restgo
func Test(t *testing.T) {
resp, err := restgo.NewHttpBuilder().
ContentType(restgo.FormData).
File("file", "/usr/local/test.image").
Payload(map[string]string{
"name": "1234",
}).
Send(restgo.GET, "http://restgo.example.com")
if err != nil {
t.Fatal(err)
}
t.Log(resp.BodyStr())
}
请求携带json的payload
Payloadinterface{}Content-Typeapplication/json
// Payload 请求载荷,根据设置的Content-Type确定最终发送形式
func (builder *httpBuilder) Payload(body interface{}) *httpBuilder {
builder.body = body
return builder
}
body中携带二进制信息
[]byteContent-TypeOctetStream
下载文件到本地
restgoWriteFile
func (wrapper *respWrapper) WriteFile(path string) error
WriteFilerestgo
restgorestgo
restgo的github地址是: github.com/xiao-ren-wu…
如果restgo对您的学习或者工作有帮助的话,请帮忙点个star~