Explorar o código

支持设置全局HTTPClient (#761)

* [新增]支持设置httpClient

* 增加说明

* 增加说明

* 格式化imports

* [fix]1.21.5 和golangci 有兼容性问题

* [fix]优化imports
oscar %!s(int64=2) %!d(string=hai) anos
pai
achega
97e1af5904
Modificáronse 3 ficheiros con 21 adicións e 12 borrados
  1. 1 1
      .github/workflows/go.yml
  2. 13 11
      util/http.go
  3. 7 0
      wechat.go

+ 1 - 1
.github/workflows/go.yml

@@ -10,7 +10,7 @@ jobs:
   golangci:
     strategy:
       matrix:
-        go-version: [ '1.16','1.17','1.18','1.19','1.20','1.21' ]
+        go-version: [ '1.16','1.17','1.18','1.19','1.20','1.21.4' ]
     name: golangci-lint
     runs-on: ubuntu-latest
     steps:

+ 13 - 11
util/http.go

@@ -22,6 +22,9 @@ type URIModifier func(uri string) string
 
 var uriModifier URIModifier
 
+// DefaultHTTPClient 默认httpClient
+var DefaultHTTPClient = http.DefaultClient
+
 // SetURIModifier 设置URI修改器
 func SetURIModifier(fn URIModifier) {
 	uriModifier = fn
@@ -41,7 +44,7 @@ func HTTPGetContext(ctx context.Context, uri string) ([]byte, error) {
 	if err != nil {
 		return nil, err
 	}
-	response, err := http.DefaultClient.Do(request)
+	response, err := DefaultHTTPClient.Do(request)
 	if err != nil {
 		return nil, err
 	}
@@ -73,7 +76,7 @@ func HTTPPostContext(ctx context.Context, uri string, data []byte, header map[st
 		request.Header.Set(key, value)
 	}
 
-	response, err := http.DefaultClient.Do(request)
+	response, err := DefaultHTTPClient.Do(request)
 	if err != nil {
 		return nil, err
 	}
@@ -102,7 +105,7 @@ func PostJSONContext(ctx context.Context, uri string, obj interface{}) ([]byte,
 		return nil, err
 	}
 	req.Header.Set("Content-Type", "application/json;charset=utf-8")
-	response, err := http.DefaultClient.Do(req)
+	response, err := DefaultHTTPClient.Do(req)
 	if err != nil {
 		return nil, err
 	}
@@ -129,7 +132,7 @@ func PostJSONWithRespContentType(uri string, obj interface{}) ([]byte, string, e
 		return nil, "", err
 	}
 
-	response, err := http.Post(uri, "application/json;charset=utf-8", jsonBuf)
+	response, err := DefaultHTTPClient.Post(uri, "application/json;charset=utf-8", jsonBuf)
 	if err != nil {
 		return nil, "", err
 	}
@@ -205,7 +208,7 @@ func PostMultipartForm(fields []MultipartFormField, uri string) (respBody []byte
 	contentType := bodyWriter.FormDataContentType()
 	bodyWriter.Close()
 
-	resp, e := http.Post(uri, contentType, bodyBuf)
+	resp, e := DefaultHTTPClient.Post(uri, contentType, bodyBuf)
 	if e != nil {
 		err = e
 		return
@@ -229,7 +232,7 @@ func PostXML(uri string, obj interface{}) ([]byte, error) {
 	}
 
 	body := bytes.NewBuffer(xmlData)
-	response, err := http.Post(uri, "application/xml;charset=utf-8", body)
+	response, err := DefaultHTTPClient.Post(uri, "application/xml;charset=utf-8", body)
 	if err != nil {
 		return nil, err
 	}
@@ -252,11 +255,10 @@ func httpWithTLS(rootCa, key string) (*http.Client, error) {
 	config := &tls.Config{
 		Certificates: []tls.Certificate{cert},
 	}
-	tr := &http.Transport{
-		TLSClientConfig:    config,
-		DisableCompression: true,
-	}
-	client = &http.Client{Transport: tr}
+	trans := (DefaultHTTPClient.Transport.(*http.Transport)).Clone()
+	trans.TLSClientConfig = config
+	trans.DisableCompression = true
+	client = &http.Client{Transport: trans}
 	return client, nil
 }
 

+ 7 - 0
wechat.go

@@ -1,6 +1,7 @@
 package wechat
 
 import (
+	"net/http"
 	"os"
 
 	log "github.com/sirupsen/logrus"
@@ -14,6 +15,7 @@ import (
 	openConfig "github.com/silenceper/wechat/v2/openplatform/config"
 	"github.com/silenceper/wechat/v2/pay"
 	payConfig "github.com/silenceper/wechat/v2/pay/config"
+	"github.com/silenceper/wechat/v2/util"
 	"github.com/silenceper/wechat/v2/work"
 	workConfig "github.com/silenceper/wechat/v2/work/config"
 )
@@ -81,3 +83,8 @@ func (wc *Wechat) GetWork(cfg *workConfig.Config) *work.Work {
 	}
 	return work.NewWork(cfg)
 }
+
+// SetHTTPClient  设置HTTPClient
+func (wc *Wechat) SetHTTPClient(client *http.Client) {
+	util.DefaultHTTPClient = client
+}