change closeidealconns to closeConns,closeConnetions to forceCloseConns ,change response close to closeBody ,delete to closeConn ,forceDelete to forceCloseConn, errorCallback add response params

This commit is contained in:
bxd
2023-11-13 17:48:56 +08:00
parent 7e22f8443c
commit f70eef2aa0
7 changed files with 25 additions and 32 deletions

View File

@@ -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()
}

View File

@@ -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

View File

@@ -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)
}
}

View File

@@ -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()
}

View File

@@ -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 {

6
rw.go
View File

@@ -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()
}

View File

@@ -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())
}
}
}