func HttpClient()

in internal/apiclient/httpclient.go [47:112]


func HttpClient(params ...string) (respBody []byte, err error) {
	// The first parameter is url. If only one parameter is sent, assume GET
	// The second parameter is the payload. The two parameters are sent, assume POST
	// THe third parameter is the method. If three parameters are sent, assume method in param
	// The fourth parameter is content type
	var req *http.Request
	contentType := "application/json"

	client, err := getHttpClient()
	if err != nil {
		return nil, err
	}

	clilog.Debug.Println("Connecting to: ", params[0])
	ctx := context.Background()

	switch paramLen := len(params); paramLen {
	case 1:
		clilog.Debug.Println("Method: GET")
		req, err = http.NewRequestWithContext(ctx, http.MethodGet, params[0], nil)
	case 2:
		// some POST functions don't have a body
		clilog.Debug.Println("Method: POST")
		if len([]byte(params[1])) > 0 {
			payload, _ := PrettifyJson([]byte(params[1]))
			clilog.Debug.Println("Payload: ", string(payload))
		}
		req, err = http.NewRequestWithContext(ctx, http.MethodPost, params[0], bytes.NewBuffer([]byte(params[1])))
	case 3:
		if req, err = getRequest(params); err != nil {
			return nil, err
		}
	case 4:
		if req, err = getRequest(params); err != nil {
			return nil, err
		}
		contentType = params[3]
	default:
		return nil, errors.New("unsupported method")
	}

	if err != nil {
		clilog.Error.Println("error in client: ", err)
		return nil, err
	}

	req, err = setAuthHeader(req)
	if err != nil {
		return nil, err
	}

	clilog.Debug.Println("Content-Type : ", contentType)
	req.Header.Set("Content-Type", contentType)

	if DryRun() {
		return nil, nil
	}

	resp, err := client.Do(req)
	if err != nil {
		clilog.Error.Println("error connecting: ", err)
		return nil, err
	}

	return handleResponse(resp)
}