post 请求


// 网络客户端
type NetClient interface {
    Post(url string, req, resp interface{}, header map[string]string) error
}

func generateUuid() string {
    u := uuid.NewV4().String()
    return u
}

type native struct {
    c *http.Client
}

func setHeaders(h http.Header, kv map[string]string) {
    h.Set("Content-Type", "application/json")
    h.Set("Access-token", "service")
    h.Set("Trace-Id", generateUuid())
    for key, value := range kv {
        h.Set(key, value)
    }
}

func (n *native) rawPost(url string, data []byte, header map[string]string) (code int, body []byte, err error) {
    var resp *http.Response
    reader := bytes.NewReader(data)
    req, err := http.NewRequest("POST", url, reader)
    if err != nil {
        return
    }
    // 设置请求头
    setHeaders(req.Header, header)
    resp, err = n.c.Do(req)
    if resp != nil {
        defer resp.Body.Close()
    }
    if err != nil {
        return
    }
    code = resp.StatusCode
    body, err = ioutil.ReadAll(resp.Body)
    return
}

func (n *native) Post(url string, req, resp interface{}, header map[string]string) (err error) {
    var reqBytes []byte
    if reqBytes, err = json.Marshal(req); err != nil {
        return err
    }
    var (
        code int
        body []byte
    )
    if code, body, err = n.rawPost(url, reqBytes, header); err != nil {
        return err
    }
    if code != http.StatusOK {
        return fmt.Errorf("http response status code !=200,code:%d", code)
    }
    return json.Unmarshal(body, resp)
}
最后修改:2023 年 12 月 30 日
如果觉得我的文章对你有用,请随意赞赏