func()

in network/client.go [256:313]


func (n *client) do(
	ctx context.Context,
	uri, method string,
	bodyProvider common.ContentProvider,
	requestType string,
	headers http.Header,
) (*http.Response, error) {
	url, err := n.url.Parse(uri)
	if err != nil {
		return nil, err
	}

	var body io.ReadCloser
	if bodyProvider != nil {
		body, err = bodyProvider.GetReader()
		if err != nil {
			return nil, fmt.Errorf("couldn't get request body: %w", err)
		}
		defer body.Close()
	}

	req, err := http.NewRequestWithContext(ctx, method, url.String(), body)
	if err != nil {
		err = fmt.Errorf("failed to create NewRequest: %w", err)
		return nil, err
	}

	if bodyProvider != nil {
		req.GetBody = func() (io.ReadCloser, error) {
			return bodyProvider.GetReader()
		}

		if length, known := bodyProvider.GetContentLength(); known {
			req.ContentLength = length
		}
	}

	if headers != nil {
		req.Header = headers
	}

	req.Header.Set("User-Agent", common.AppVersion.UserAgent())
	if bodyProvider != nil {
		req.Header.Set(common.ContentType, requestType)
	}

	n.ensureTLSConfig()
	n.ensureTransportMaxAge()

	res, err := n.requester.Do(req)
	if err != nil {
		return nil, err
	}

	n.checkBackoffRequest(req, res)

	return res, nil
}