1 Star 2 Fork 3

kristas/booting-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
request_util.go 1.50 KB
一键复制 编辑 原始数据 按行查看 历史
kristas 提交于 2021-07-02 12:59 . fix: remove ioutil usage
package httpx
import (
"bytes"
"encoding/json"
"errors"
"io"
"net/http"
"net/url"
)
type HttpX struct {
resp *http.Response
err error
}
func NewHttpX() *HttpX {
return &HttpX{}
}
type Condition struct {
Data interface{}
Param url.Values
Header http.Header
}
func (r *HttpX) Request(method string, _url string, c Condition) *HttpX {
client := &http.Client{}
// params
if c.Param != nil {
URL, err := url.Parse(_url)
if err != nil {
r.err = err
return r
}
URL.RawQuery = c.Param.Encode()
_url = URL.String()
}
// data
var reader io.Reader = nil
if c.Data != nil {
bytesData, err := json.Marshal(c.Data)
if err != nil {
r.err = err
return r
}
reader = bytes.NewReader(bytesData)
}
req, err := http.NewRequest(method, _url, reader)
if err != nil {
r.err = err
return r
}
// header
req.Header = c.Header
resp, err := client.Do(req)
if err != nil {
r.err = err
return r
}
r.resp = resp
return r
}
func (r *HttpX) Get(url string, c Condition) *HttpX {
return r.Request("GET", url, c)
}
func (r *HttpX) Post(url string, c Condition) *HttpX {
return r.Request("POST", url, c)
}
func (r *HttpX) Then(accept func(data []byte)) *HttpX {
if r.resp != nil {
defer r.resp.Body.Close()
} else {
r.err = errors.New("remote query failed")
return r
}
bytes, err := io.ReadAll(r.resp.Body)
if err != nil {
r.err = err
return r
}
accept(bytes)
return r
}
func (r *HttpX) Catch(accept func(err error)) *HttpX {
if r.err != nil {
accept(r.err)
}
return r
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/kristas/booting-go.git
git@gitee.com:kristas/booting-go.git
kristas
booting-go
booting-go
v1.3.5

搜索帮助