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"
|
2023-09-20 21:18:48 +08:00
|
|
|
"io"
|
2023-06-15 21:22:51 +08:00
|
|
|
"net/http"
|
2023-09-20 21:18:48 +08:00
|
|
|
"net/url"
|
2023-09-20 22:14:09 +08:00
|
|
|
"strings"
|
2023-06-15 21:22:51 +08:00
|
|
|
)
|
|
|
|
|
2023-09-20 21:18:48 +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 实现
|
2023-09-20 22:14:09 +08:00
|
|
|
func RequestGet(uri string, vals url.Values, headers map[string]string) ([]byte, error) {
|
|
|
|
req, err := http.NewRequest("GET", uri, strings.NewReader(vals.Encode()))
|
2023-09-20 21:18:48 +08:00
|
|
|
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 请求
|
2023-09-20 22:04:47 +08:00
|
|
|
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))
|
2023-09-20 21:18:48 +08:00
|
|
|
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
|
|
|
|
}
|