From f70eef2aa098c8a76e91b79865a026ab19431620 Mon Sep 17 00:00:00 2001 From: bxd <2216403312@qq.com> Date: Mon, 13 Nov 2023 17:48:56 +0800 Subject: [PATCH] change closeidealconns to closeConns,closeConnetions to forceCloseConns ,change response close to closeBody ,delete to closeConn ,forceDelete to forceCloseConn, errorCallback add response params --- client.go | 14 +++++++------- option.go | 2 +- requests.go | 6 +++--- response.go | 14 +++++++------- roundTripper.go | 4 ++-- rw.go | 6 +++--- test/request_test.go | 11 ++--------- 7 files changed, 25 insertions(+), 32 deletions(-) diff --git a/client.go b/client.go index 62b0493..9ca8d9f 100644 --- a/client.go +++ b/client.go @@ -28,7 +28,7 @@ type ClientOption struct { Timeout time.Duration //request timeout OptionCallBack func(ctx context.Context, client *Client, option *RequestOption) error //option callback,if error is returnd, break request ResultCallBack func(ctx context.Context, client *Client, response *Response) error //result callback,if error is returnd,next errCallback - ErrCallBack func(ctx context.Context, client *Client, err error) error //error callback,if error is returnd,break request + ErrCallBack func(ctx context.Context, client *Client, response *Response, err error) error //error callback,if error is returnd,break request RequestCallBack func(ctx context.Context, request *http.Request, response *http.Response) error //request and response callback,if error is returnd,reponse is error TryNum int //try num MaxRedirectNum int //redirect num ,<0 no redirect,==0 no limit @@ -65,7 +65,7 @@ type Client struct { optionCallBack func(context.Context, *Client, *RequestOption) error resultCallBack func(ctx context.Context, client *Client, response *Response) error - errCallBack func(context.Context, *Client, error) error + errCallBack func(context.Context, *Client, *Response, error) error timeout time.Duration responseHeaderTimeout time.Duration @@ -179,18 +179,18 @@ func (obj *Client) SetGetProxy(getProxy func(ctx context.Context, url *url.URL) } // Close idle connections. If the connection is in use, wait until it ends before closing -func (obj *Client) CloseIdleConnections() { - obj.transport.closeIdleConnections() +func (obj *Client) CloseConns() { + obj.transport.closeConns() } // Close the connection, even if it is in use, it will be closed -func (obj *Client) CloseConnections() { - obj.transport.closeConnections() +func (obj *Client) ForceCloseConns() { + obj.transport.forceCloseConns() } // Close the client and cannot be used again after shutdown func (obj *Client) Close() { - obj.CloseConnections() + obj.ForceCloseConns() obj.cnl() } diff --git a/option.go b/option.go index f228a5a..e5204e2 100644 --- a/option.go +++ b/option.go @@ -33,7 +33,7 @@ type RequestOption struct { Timeout time.Duration //request timeout OptionCallBack func(ctx context.Context, client *Client, option *RequestOption) error //option callback,if error is returnd, break request ResultCallBack func(ctx context.Context, client *Client, response *Response) error //result callback,if error is returnd,next errCallback - ErrCallBack func(ctx context.Context, client *Client, err error) error //error callback,if error is returnd,break request + ErrCallBack func(ctx context.Context, client *Client, response *Response, err error) error //error callback,if error is returnd,break request RequestCallBack func(ctx context.Context, request *http.Request, response *http.Response) error //request and response callback,if error is returnd,reponse is error TryNum int //try num MaxRedirectNum int //redirect num ,<0 no redirect,==0 no limit diff --git a/requests.go b/requests.go index 89f02eb..717b04f 100644 --- a/requests.go +++ b/requests.go @@ -195,15 +195,15 @@ func (obj *Client) request(ctx context.Context, option *RequestOption) (response defer func() { if err == nil && !response.oneceAlive() { err = response.ReadBody() - defer response.Close() + defer response.CloseBody() } if err == nil && option.ResultCallBack != nil { err = option.ResultCallBack(ctx, obj, response) } if err != nil { - response.Close() + response.CloseBody() if option.ErrCallBack != nil { - if err2 := option.ErrCallBack(ctx, obj, err); err2 != nil { + if err2 := option.ErrCallBack(ctx, obj, response, err); err2 != nil { err = tools.WrapError(errFatal, err2) } } diff --git a/response.go b/response.go index 9bf0f17..9ce0354 100644 --- a/response.go +++ b/response.go @@ -267,7 +267,7 @@ func (obj *Response) ReadBody() error { err = tools.CopyWitchContext(obj.response.Request.Context(), bBody, obj.response.Body, false) } if err != nil { - obj.Delete() + obj.CloseConn() return errors.New("response read content error: " + err.Error()) } if !obj.disUnzip { @@ -288,13 +288,13 @@ func (obj *Response) ReadBody() error { } // safe close conn -func (obj *Response) Delete() { - obj.response.Body.(interface{ Delete() }).Delete() +func (obj *Response) CloseConn() { + obj.response.Body.(interface{ CloseConn() }).CloseConn() } // force close conn -func (obj *Response) ForceDelete() { - obj.response.Body.(interface{ ForceDelete() }).ForceDelete() +func (obj *Response) ForceCloseConn() { + obj.response.Body.(interface{ ForceCloseConn() }).ForceCloseConn() } // conn proxy @@ -323,7 +323,7 @@ func (obj *Response) H2Ja3() string { } // close body -func (obj *Response) Close() error { +func (obj *Response) CloseBody() error { if obj.cnl != nil { defer obj.cnl() } @@ -332,7 +332,7 @@ func (obj *Response) Close() error { } if obj.response != nil && obj.response.Body != nil { if err := tools.CopyWitchContext(obj.ctx, io.Discard, obj.response.Body, false); err != nil { - obj.Delete() + obj.CloseConn() } else { return obj.response.Body.Close() } diff --git a/roundTripper.go b/roundTripper.go index 77a7e3a..41e2a19 100644 --- a/roundTripper.go +++ b/roundTripper.go @@ -251,7 +251,7 @@ func (obj *RoundTripper) poolRoundTrip(task *reqTask, key connKey) (bool, error) return false, nil } -func (obj *RoundTripper) closeIdleConnections() { +func (obj *RoundTripper) closeConns() { obj.connsLock.Lock() defer obj.connsLock.Unlock() for key, pool := range obj.connPools { @@ -260,7 +260,7 @@ func (obj *RoundTripper) closeIdleConnections() { } } -func (obj *RoundTripper) closeConnections() { +func (obj *RoundTripper) forceCloseConns() { obj.connsLock.Lock() defer obj.connsLock.Unlock() for key, pool := range obj.connPools { diff --git a/rw.go b/rw.go index c7eafc4..99beaf1 100644 --- a/rw.go +++ b/rw.go @@ -19,7 +19,7 @@ func (obj *readWriteCloser) Read(p []byte) (n int, err error) { func (obj *readWriteCloser) Close() (err error) { err = obj.body.Close() if !obj.InPool() { - obj.ForceDelete() + obj.ForceCloseConn() } else { obj.conn.bodyCnl() } @@ -39,11 +39,11 @@ func (obj *readWriteCloser) H2Ja3() string { } // safe close conn -func (obj *readWriteCloser) Delete() { +func (obj *readWriteCloser) CloseConn() { obj.conn.closeCnl() } // force close conn -func (obj *readWriteCloser) ForceDelete() { +func (obj *readWriteCloser) ForceCloseConn() { obj.conn.Close() } diff --git a/test/request_test.go b/test/request_test.go index a1d786a..2ec748b 100644 --- a/test/request_test.go +++ b/test/request_test.go @@ -1,6 +1,7 @@ package main import ( + "log" "testing" "github.com/gospider007/requests" @@ -12,15 +13,7 @@ func TestDefaultClient(t *testing.T) { if err != nil { t.Error(err) } else { - if i == 0 { - if !resp.IsNewConn() { - t.Error("new conn") - } - } else { - if resp.IsNewConn() { - t.Error("not new conn") - } - } + log.Printf("send num: %d, new conn: %v", i, resp.IsNewConn()) } } }