package util import ( "bytes" "crypto/tls" "encoding/json" "github.com/ajg/form" "io/ioutil" "net/http" "strings" ) const ( DATA_URL_PREFIX = "/data/api-v" CONTENT_TYPE_FORM = "application/x-www-form-urlencoded" CONTENT_TYPE_MULFORM = "multipart/form-data" CONTENT_TYPE_JSON = "application/json" CONTENT_TYPE_UTF8_JSON = "application/json;charset=utf-8" ) func DoPostRequest(url string, contentType string, body map[string]interface{}, params map[string]string, headers map[string]string) ([]byte, error) { var resultBytes []byte var request *http.Request var err error if contentType == CONTENT_TYPE_FORM || contentType == CONTENT_TYPE_MULFORM { formData, err := form.EncodeToString(body) if err != nil { return resultBytes, err } request, err = http.NewRequest("POST", url, strings.NewReader(formData)) if err != nil { return resultBytes, err } } else { var bodyJson []byte if body != nil { var err error bodyJson, err = json.Marshal(body) if err != nil { return resultBytes, err } } request, err = http.NewRequest("POST", url, bytes.NewBuffer(bodyJson)) if err != nil { return resultBytes, err } } request.Header.Set("Content-type", contentType) //add params q := request.URL.Query() if params != nil { for key, val := range params { q.Add(key, val) } request.URL.RawQuery = q.Encode() } // add headers if headers != nil { for key, val := range headers { request.Header.Add(key, val) } } tr := &http.Transport{ TLSClientConfig: &tls.Config{ InsecureSkipVerify: true, }, } client := &http.Client{ Transport: tr, } resp, err := client.Do(request) if err != nil { return resultBytes, err } defer resp.Body.Close() resultBytes, err = ioutil.ReadAll(resp.Body) if err != nil { return resultBytes, err } return resultBytes, nil } //构造delete请求 func DoDeleteRequest(url string, contentType string, body map[string]interface{}, headers map[string]string) ([]byte, error) { var resultBytes []byte var bodyJson []byte if body != nil { var err error bodyJson, err = json.Marshal(body) if err != nil { return resultBytes, err } } request, err := http.NewRequest("DELETE", url, bytes.NewBuffer(bodyJson)) if err != nil { return resultBytes, err } request.Header.Set("Content-type", contentType) // add headers if headers != nil { for key, val := range headers { request.Header.Add(key, val) } } client := &http.Client{} resp, err := client.Do(request) if err != nil { return resultBytes, err } defer resp.Body.Close() resultBytes, err = ioutil.ReadAll(resp.Body) if err != nil { return resultBytes, err } return resultBytes, nil }