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) }