mirror of
https://github.com/gospider007/requests.git
synced 2025-12-24 13:57:52 +08:00
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:
14
client.go
14
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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
14
response.go
14
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()
|
||||
}
|
||||
|
||||
@@ -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
6
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()
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user