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 }