From 4c1c771d8468262c019e39493dfad9548a1501a3 Mon Sep 17 00:00:00 2001 From: "Aruelius.L" <25380989+Aruelius@users.noreply.github.com> Date: Thu, 28 Mar 2024 14:22:01 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix(sessions):=20=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=20`Transport`=20=E5=AF=BC=E8=87=B4=E5=86=85?= =?UTF-8?q?=E5=AD=98=E6=BA=A2=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sessions.go | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/sessions.go b/sessions.go index 043d8d4..ad75449 100644 --- a/sessions.go +++ b/sessions.go @@ -133,6 +133,8 @@ var disableRedirect = func(request *http.Request, via []*http.Request) error { return http.ErrUseLastResponse } +var DEFAULT_TRANSPORT *http.Transport // 默认 Transport + const ( DEFAULT_REDIRECT_LIMIT = 30 // 默认redirect最大次数 DEFAULT_TIMEOUT = 10 // 默认client响应时间 @@ -151,14 +153,20 @@ func NewSession() *Session { } cookies, _ := cookiejar.New(nil) session.Cookies = cookies - session.transport = &http.Transport{ - TLSClientConfig: &utls.Config{ - InsecureSkipVerify: session.Verify, - OmitEmptyPsk: true, - }, - DisableKeepAlives: false, // 这里问题很严重 + + if DEFAULT_TRANSPORT == nil { + // Transports should be reused instead of created as needed. + // Transports are safe for concurrent use by multiple goroutines. + DEFAULT_TRANSPORT = &http.Transport{ + TLSClientConfig: &utls.Config{ + InsecureSkipVerify: session.Verify, + OmitEmptyPsk: true, + }, + DisableKeepAlives: false, + } } - session.request = &http.Request{} + session.transport = DEFAULT_TRANSPORT + session.client = &http.Client{ Transport: session.transport, CheckRedirect: nil, From a5cf141fc052dc09fa1c3904cc1ad658b8e7dd26 Mon Sep 17 00:00:00 2001 From: "Aruelius.L" <25380989+Aruelius@users.noreply.github.com> Date: Thu, 28 Mar 2024 14:52:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BD=BF=E7=94=A8=20`sync.Once`=20?= =?UTF-8?q?=E4=BF=9D=E8=AF=81=E8=B5=8B=E5=80=BC=E8=AF=AD=E5=8F=A5=E5=8F=AA?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sessions.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sessions.go b/sessions.go index ad75449..5c1332b 100644 --- a/sessions.go +++ b/sessions.go @@ -133,7 +133,10 @@ var disableRedirect = func(request *http.Request, via []*http.Request) error { return http.ErrUseLastResponse } -var DEFAULT_TRANSPORT *http.Transport // 默认 Transport +var ( + DEFAULT_TRANSPORT *http.Transport // 默认 Transport + defineTransport sync.Once +) const ( DEFAULT_REDIRECT_LIMIT = 30 // 默认redirect最大次数 @@ -154,7 +157,7 @@ func NewSession() *Session { cookies, _ := cookiejar.New(nil) session.Cookies = cookies - if DEFAULT_TRANSPORT == nil { + defineTransport.Do(func() { // Transports should be reused instead of created as needed. // Transports are safe for concurrent use by multiple goroutines. DEFAULT_TRANSPORT = &http.Transport{ @@ -164,7 +167,7 @@ func NewSession() *Session { }, DisableKeepAlives: false, } - } + }) session.transport = DEFAULT_TRANSPORT session.client = &http.Client{