golib/helper/http_helper.go

128 lines
2.6 KiB
Go
Raw Normal View History

2023-06-15 21:22:51 +08:00
//
// http_helper.go
// Copyright (C) 2023 tiglog <me@tiglog.com>
//
// Distributed under terms of the MIT license.
//
package helper
import (
"bytes"
"encoding/json"
"errors"
"io"
2023-06-15 21:22:51 +08:00
"net/http"
"net/url"
"strings"
2023-06-15 21:22:51 +08:00
)
// vals := url.Values{}
// vals.Add("name","zhaofan")
// vals.Add("age","22")
func RequestPostForm(url string, vals url.Values) ([]byte, error) {
resp, err := http.PostForm(url, vals)
if err != nil {
return nil, err
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return body, nil
}
func RequestPostJson(url string, data map[string]any) ([]byte, error) {
bd, err := json.Marshal(data)
if err != nil {
return nil, err
}
resp, err := http.Post(url, "application/json", bytes.NewReader(bd))
if err != nil {
return nil, err
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return body, nil
}
// 比较完整的 get 实现
func RequestGet(uri string, vals url.Values, headers map[string]string) ([]byte, error) {
req, err := http.NewRequest("GET", uri, strings.NewReader(vals.Encode()))
if err != nil {
return nil, err
}
for hd, val := range headers {
req.Header.Set(hd, val)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return body, nil
}
// 默认是 json 请求
func RequestPost(url string, data map[string]any, headers map[string]string) ([]byte, error) {
bd, err := json.Marshal(data)
if err != nil {
return nil, err
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(bd))
if err != nil {
return nil, err
}
if len(headers) == 0 {
headers["Content-Type"] = "application/json"
}
for hd, val := range headers {
req.Header.Set(hd, val)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return body, nil
}
// 旧的方法,不建议使用
2023-06-15 21:22:51 +08:00
func RequestJson(url string, data []byte) (*http.Response, error) {
res, err := http.Post(url, "application/json", bytes.NewBuffer(data))
if err != nil {
return nil, err
}
return res, nil
}
func NotifyBack(url string, vals map[string]any, errmsg string) (*http.Response, error) {
if url == "" {
return nil, errors.New("no url")
}
vals["msg"] = errmsg
if errmsg == "" {
vals["stat"] = "ok"
} else {
vals["stat"] = "fail"
}
body, _ := json.Marshal(vals)
res, err := http.Post(url, "application/json", bytes.NewReader(body))
if err != nil {
return nil, err
}
return res, nil
}