From: qydysky Date: Sun, 25 May 2025 11:57:56 +0000 (+0800) Subject: 1 (#59) X-Git-Tag: v0.28.20250525115804 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=a2e7b7b00dc541a08286d3b7cdf3f0d900a33bba;p=part%2F.git 1 (#59) --- diff --git a/reqf/Reqf.go b/reqf/Reqf.go index f65ff0b..09d0e9e 100644 --- a/reqf/Reqf.go +++ b/reqf/Reqf.go @@ -87,6 +87,7 @@ type Req struct { state atomic.Int32 client *http.Client + reqProxy string responFile *os.File responBuf *bytes.Buffer reqBody io.Reader @@ -302,7 +303,6 @@ func (t *Req) prepareRes(val *Rval) { if reader, ok := t.reqBody.(*strings.Reader); ok { reader.Seek(0, io.SeekStart) } - return } func (t *Req) prepare(val *Rval) (ctx1 context.Context, ctxf1 context.CancelCauseFunc, e error) { @@ -337,21 +337,33 @@ func (t *Req) prepare(val *Rval) (ctx1 context.Context, ctxf1 context.CancelCaus if t.client == nil { t.client = &http.Client{} } + + var initTransport bool if t.client.Transport == nil { - t.client.Transport = &http.Transport{} - } - if val.Proxy != "" { - t.client.Transport.(*http.Transport).Proxy = func(_ *http.Request) (*url.URL, error) { - return url.Parse(val.Proxy) + initTransport = true + } else if httpTransport, ok := t.client.Transport.(*http.Transport); !ok { + initTransport = true + } else if val.IdleConnTimeout > 0 && int64(val.IdleConnTimeout) != httpTransport.IdleConnTimeout.Milliseconds() { + initTransport = true + } else if val.ResponseHeaderTimeout > 0 && int64(val.ResponseHeaderTimeout) != httpTransport.ResponseHeaderTimeout.Milliseconds() { + initTransport = true + } else if t.reqProxy != val.Proxy { + initTransport = true + } + if initTransport { + t.client.Transport = http.DefaultTransport.(*http.Transport).Clone() + if val.Proxy != "" { + t.reqProxy = val.Proxy + t.client.Transport.(*http.Transport).Proxy = func(_ *http.Request) (*url.URL, error) { + return url.Parse(val.Proxy) + } + } + if val.IdleConnTimeout > 0 { + t.client.Transport.(*http.Transport).IdleConnTimeout = time.Duration(val.IdleConnTimeout) * time.Millisecond + } + if val.ResponseHeaderTimeout > 0 { + t.client.Transport.(*http.Transport).ResponseHeaderTimeout = time.Duration(val.ResponseHeaderTimeout) * time.Millisecond } - } - if val.IdleConnTimeout == 0 { - t.client.Transport.(*http.Transport).IdleConnTimeout = time.Minute - } else if val.IdleConnTimeout > 0 { - t.client.Transport.(*http.Transport).IdleConnTimeout = time.Duration(val.IdleConnTimeout) * time.Millisecond - } - if val.ResponseHeaderTimeout > 0 { - t.client.Transport.(*http.Transport).ResponseHeaderTimeout = time.Duration(val.ResponseHeaderTimeout) * time.Millisecond } if val.Ctx == nil { val.Ctx = context.Background()