134 lines
2.7 KiB
Go
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)
|
|
}
|