github.com/instana/go-sensor@v1.62.2-0.20240520081010-4919868049e1/acceptor/http_client.go (about)

     1  // (c) Copyright IBM Corp. 2021
     2  // (c) Copyright Instana Inc. 2020
     3  
     4  package acceptor
     5  
     6  import (
     7  	"errors"
     8  	"net/http"
     9  	"net/url"
    10  	"os"
    11  	"time"
    12  )
    13  
    14  // ErrMalformedProxyURL is returned by NewHTTPClient() when the INSTANA_ENDPOINT_PROXY= env var contains
    15  // a malformed URL string
    16  var ErrMalformedProxyURL = errors.New("malformed URL value found in INSTANA_ENDPOINT_PROXY, ignoring")
    17  
    18  // NewHTTPClient returns an http.Client configured for sending requests to the Instana serverless acceptor.
    19  // If INSTANA_ENDPOINT_PROXY= env var is populated with a vaild URL, the returned client will use it as an
    20  // HTTP proxy. If the value is malformed, this setting is ignored and ErrMalformedProxyURL error is returned.
    21  // The returned http.Client instance in this case is usable, but does not use a proxy to connect to the acceptor.
    22  func NewHTTPClient(timeout time.Duration) (*http.Client, error) {
    23  	client := &http.Client{}
    24  
    25  	if timeout > 0 {
    26  		client.Timeout = timeout
    27  	}
    28  
    29  	proxy := os.Getenv("INSTANA_ENDPOINT_PROXY")
    30  	if proxy == "" {
    31  		return client, nil
    32  	}
    33  
    34  	proxyURL, err := url.Parse(proxy)
    35  	if err != nil {
    36  		return client, ErrMalformedProxyURL
    37  	}
    38  
    39  	client.Transport = &http.Transport{
    40  		Proxy: http.ProxyURL(proxyURL),
    41  	}
    42  
    43  	return client, nil
    44  }