func()

in pitr/cli/pkg/httputils/req.go [73:127]


func (r *req) Send(body any) error {
	var (
		bs  []byte
		err error
	)

	if r.body != nil {
		bs, err = json.Marshal(r.body)
		if err != nil {
			return fmt.Errorf("json.Marshal return err=%w", err)
		}
	}

	_req, err := http.NewRequestWithContext(r.ctx, r.method, r.url, bytes.NewReader(bs))
	if err != nil {
		return fmt.Errorf("new request failure,err=%w", err)
	}

	// set header
	_req = r.setReqHeader(_req)

	for k, v := range r.query {
		values := _req.URL.Query()
		values.Add(k, v)
		_req.URL.RawQuery = values.Encode()
	}

	tr := &http.Transport{
		//nolint:gosec
		TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
	}
	c := &http.Client{Transport: tr}
	resp, err := c.Do(_req)
	if err != nil {
		return fmt.Errorf("http request err=%w", err)
	}

	defer resp.Body.Close()

	all, err := io.ReadAll(resp.Body)
	if err != nil {
		return fmt.Errorf("invalid response,err=%w", err)
	}
	if body != nil {
		if err = json.Unmarshal(all, body); err != nil {
			return fmt.Errorf("json unmarshal return err=%w", err)
		}
	}

	if resp.StatusCode != http.StatusOK {
		return fmt.Errorf("response status code is not 200, code=%d", resp.StatusCode)
	}

	return nil
}