func NewHTTPClientWithOpts()

in client/httpclient.go [87:132]


func NewHTTPClientWithOpts(gitlabURL, gitlabRelativeURLRoot, caFile, caPath string, readTimeoutSeconds uint64, opts []HTTPClientOpt) (*HTTPClient, error) {
	hcc := &httpClientCfg{
		caFile:       caFile,
		caPath:       caPath,
		retryWaitMin: defaultRetryWaitMinimum,
		retryWaitMax: defaultRetryWaitMaximum,
		retryMax:     defaultRetryMax,
	}

	for _, opt := range opts {
		opt(hcc)
	}

	var transport *http.Transport
	var host string
	var err error
	switch {
	case strings.HasPrefix(gitlabURL, unixSocketProtocol):
		transport, host = buildSocketTransport(gitlabURL, gitlabRelativeURLRoot)
	case strings.HasPrefix(gitlabURL, httpProtocol):
		transport, host = buildHTTPTransport(gitlabURL)
	case strings.HasPrefix(gitlabURL, httpsProtocol):
		err = validateCaFile(caFile)
		if err != nil {
			return nil, err
		}
		transport, host, err = buildHTTPSTransport(*hcc, gitlabURL)
		if err != nil {
			return nil, err
		}
	default:
		return nil, errors.New("unknown GitLab URL prefix")
	}

	c := retryablehttp.NewClient()
	c.RetryMax = hcc.retryMax
	c.RetryWaitMax = hcc.retryWaitMax
	c.RetryWaitMin = hcc.retryWaitMin
	c.Logger = nil
	c.HTTPClient.Transport = NewTransport(transport)
	c.HTTPClient.Timeout = readTimeout(readTimeoutSeconds)

	client := &HTTPClient{RetryableHTTP: c, Host: host}

	return client, nil
}