liuxiaolong
2020-06-16 d80e076c2d45647bbbf82c27c4ad8924283dc708
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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"
)
 
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
}