17 Data json.RawMessage `json:"data"`
20 type response struct {
21 Code int `json:"code"`
22 Msg string `json:"msg"`
23 Res Result `json:"result,omitempty"`
26 func (s *Server) request(apiURL string, payload []byte, respData interface{}) error {
27 url := "http://" + s.IP + ":" + s.Port + "/" + apiURL
29 if err := post(url, payload, resp); err != nil {
34 return errors.New(resp.Msg)
37 return json.Unmarshal(resp.Res.Data, respData)
40 func post(url string, payload []byte, result interface{}) error {
41 return PostWithHeader(url, nil, payload, result)
44 func PostWithHeader(url string, header map[string]string, payload []byte, result interface{}) error {
45 req, err := http.NewRequest("POST", url, bytes.NewBuffer(payload))
50 // set Content-Type in advance, and overwrite Content-Type if provided
51 req.Header.Set("Content-Type", "application/json")
52 for k, v := range header {
56 client := &http.Client{}
57 resp, err := client.Do(req)
62 defer resp.Body.Close()
67 body, err := ioutil.ReadAll(resp.Body)
72 return json.Unmarshal(body, result)