github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/edge/pkg/edgehub/common/http/http.go (about)

     1  package http
     2  
     3  import (
     4  	"crypto/tls"
     5  	"crypto/x509"
     6  	"io"
     7  	"net"
     8  	"net/http"
     9  	"time"
    10  
    11  	"k8s.io/klog"
    12  )
    13  
    14  const (
    15  	defaultConnectTimeout            = 30 * time.Second
    16  	defaultKeepAliveTimeout          = 30 * time.Second
    17  	defaultResponseReadTimeout       = 300 * time.Second
    18  	defaultMaxIdleConnectionsPerHost = 3
    19  )
    20  
    21  var (
    22  	connectTimeout            = defaultConnectTimeout
    23  	keepaliveTimeout          = defaultKeepAliveTimeout
    24  	responseReadTimeout       = defaultResponseReadTimeout
    25  	maxIdleConnectionsPerHost = defaultMaxIdleConnectionsPerHost
    26  )
    27  
    28  // NewHTTPClient create new client
    29  func NewHTTPClient() *http.Client {
    30  	transport := &http.Transport{
    31  		Dial: (&net.Dialer{
    32  			Timeout:   connectTimeout,
    33  			KeepAlive: keepaliveTimeout,
    34  		}).Dial,
    35  		MaxIdleConnsPerHost:   maxIdleConnectionsPerHost,
    36  		ResponseHeaderTimeout: responseReadTimeout,
    37  		TLSClientConfig:       &tls.Config{InsecureSkipVerify: true},
    38  	}
    39  	klog.Infof("tlsConfig InsecureSkipVerify true")
    40  	return &http.Client{Transport: transport}
    41  }
    42  
    43  // NewHTTPSclient create https client
    44  func NewHTTPSclient(certFile, keyFile string) (*http.Client, error) {
    45  	pool := x509.NewCertPool()
    46  	cliCrt, err := tls.LoadX509KeyPair(certFile, keyFile)
    47  	if err != nil {
    48  		klog.Errorf("Cannot create https client , Loadx509keypair err: %v", err)
    49  		return nil, err
    50  	}
    51  	tr := &http.Transport{
    52  		TLSClientConfig: &tls.Config{
    53  			RootCAs:      pool,
    54  			Certificates: []tls.Certificate{cliCrt},
    55  			MinVersion:   tls.VersionTLS12,
    56  			CipherSuites: []uint16{
    57  				tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
    58  			},
    59  			InsecureSkipVerify: true}, /*Now we need set it true*/
    60  	}
    61  	client := &http.Client{Transport: tr, Timeout: connectTimeout}
    62  	return client, nil
    63  }
    64  
    65  // SendRequest sends a http request and return the resp info
    66  func SendRequest(req *http.Request, client *http.Client) (*http.Response, error) {
    67  	resp, err := client.Do(req)
    68  	if err != nil {
    69  		return nil, err
    70  	}
    71  	return resp, nil
    72  }
    73  
    74  // BuildRequest Creates a HTTP request.
    75  func BuildRequest(method string, urlStr string, body io.Reader, token string) (*http.Request, error) {
    76  	req, err := http.NewRequest(method, urlStr, body)
    77  	if err != nil {
    78  		return nil, err
    79  	}
    80  	if token != "" {
    81  		req.Header.Add("X-Auth-Token", token)
    82  	}
    83  	req.Header.Add("Content-Type", "application/json")
    84  	return req, nil
    85  }