mh_server/lib/requests/requests.go
2021-06-30 10:12:05 +08:00

134 lines
2.7 KiB
Go

package requests
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func Get(url string, data map[string]string, header ...map[string]string) ([]byte, error) {
if len(header) > 1 {
return nil, HeaderToLongErr
}
var params []string
for k, v := range data {
params = append(params, fmt.Sprintf("%s=%s", k, v))
}
if strings.Contains(url, "?") {
if len(data) != 0 {
url = url + "&" + strings.Join(params, "&")
}
} else {
url = url + "?" + strings.Join(params, "&")
}
client := http.DefaultClient
req, err := http.NewRequest("GET", url, nil)
if len(header) > 0 {
for k, v := range header[0] {
req.Header.Set(k, v)
}
}
resp, err := client.Do(req)
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
return nil, err
}
if resp.StatusCode != http.StatusOK {
return nil, ResponseIsNot200
}
response, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return response, nil
}
func Post(url string, data map[string]interface{}, contentType ContentType, header ...map[string]interface{}) ([]byte, error) {
if len(header) > 1 {
return nil, HeaderToLongErr
}
client := http.DefaultClient
var req *http.Request
var err error
if contentType == Form {
var params []string
for k, v := range data {
if value, err := switchToString(v); err != nil {
return nil, err
} else {
params = append(params, fmt.Sprintf("%s=%s", k, value))
}
}
req, err = http.NewRequest("POST", url, strings.NewReader(strings.Join(params, "&")))
} else if contentType == JSON {
reqJson, _ := json.Marshal(data)
req, err = http.NewRequest("POST", url, bytes.NewReader(reqJson))
} else {
return nil, UnSupportContentType
}
req.Header.Set("Content-Type", string(contentType))
if len(header) > 0 {
for k, v := range header[0] {
if value, ok := v.(string); !ok {
return nil, HeaderValueErr
} else {
req.Header.Set(k, value)
}
}
}
resp, err := client.Do(req)
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
return nil, err
}
if resp.StatusCode != http.StatusOK {
return nil, ResponseIsNot200
}
response, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return response, nil
}
func GetAndParseJson(url string, data map[string]string, value interface{}, header ...map[string]string) error {
resp, err := Get(url, data, header...)
if err != nil {
return err
}
return json.Unmarshal(resp, value)
}
func PostAndParseJson(url string, data map[string]interface{}, contentType ContentType, value interface{},
header ...map[string]interface{}) error {
resp, err := Post(url, data, contentType, header...)
if err != nil {
return err
}
return json.Unmarshal(resp, value)
}