This commit is contained in:
gospider
2025-02-27 09:02:46 +08:00
parent d7d7796b22
commit 068b80538f
7 changed files with 40 additions and 21 deletions

20
dial.go
View File

@@ -133,10 +133,18 @@ func (obj *Dialer) dialContext(ctx *Response, network string, addr Address, isPr
return con, err
}
func (obj *Dialer) DialContext(ctx *Response, network string, addr Address) (net.Conn, error) {
return obj.dialContext(ctx, network, addr, false)
conn, err := obj.dialContext(ctx, network, addr, false)
if err != nil {
err = tools.WrapError(err, "DialContext error")
}
return conn, err
}
func (obj *Dialer) ProxyDialContext(ctx *Response, network string, addr Address) (net.Conn, error) {
return obj.dialContext(ctx, network, addr, true)
conn, err := obj.dialContext(ctx, network, addr, true)
if err != nil {
err = tools.WrapError(err, "ProxyDialContext error")
}
return conn, err
}
func (obj *Dialer) DialProxyContext(ctx *Response, network string, proxyTlsConfig *tls.Config, proxyUrls ...Address) (net.PacketConn, net.Conn, error) {
proxyLen := len(proxyUrls)
@@ -150,9 +158,8 @@ func (obj *Dialer) DialProxyContext(ctx *Response, network string, proxyTlsConfi
oneProxy := proxyUrls[index]
remoteUrl := proxyUrls[index+1]
if index == 0 {
conn, err = obj.dialProxyContext(ctx, network, oneProxy)
if err != nil {
return packCon, conn, err
if conn, err = obj.dialProxyContext(ctx, network, oneProxy); err != nil {
break
}
}
packCon, conn, err = obj.verifyProxyToRemote(ctx, conn, proxyTlsConfig, oneProxy, remoteUrl, index == proxyLen-2, true)
@@ -212,6 +219,9 @@ func (obj *Dialer) verifyProxyToRemote(ctx *Response, conn net.Conn, proxyTlsCon
case <-ctx.Context().Done():
return packCon, conn, context.Cause(ctx.Context())
case <-done:
if err != nil {
err = tools.WrapError(err, "verifyProxyToRemote error")
}
return packCon, conn, err
}
}

12
go.mod
View File

@@ -7,12 +7,12 @@ require (
github.com/gospider007/bs4 v0.0.0-20250221153846-5f06efc2ebf1
github.com/gospider007/gson v0.0.0-20250221154009-98d1695297de
github.com/gospider007/gtls v0.0.0-20250217075148-cad34209c0ae
github.com/gospider007/http2 v0.0.0-20250221154021-1366bc240764
github.com/gospider007/http3 v0.0.0-20250221154026-be54f80e5184
github.com/gospider007/http2 v0.0.0-20250226135657-bd12c18bfa85
github.com/gospider007/http3 v0.0.0-20250226135718-f7f291b88480
github.com/gospider007/ja3 v0.0.0-20250221154036-c583ec1f60a4
github.com/gospider007/proxy v0.0.0-20250221154359-9d745b93f9f6
github.com/gospider007/re v0.0.0-20250217075352-bcb79f285d6c
github.com/gospider007/tools v0.0.0-20250221154605-e0d63fd3e79b
github.com/gospider007/tools v0.0.0-20250226135821-5d2fbfa9054d
github.com/gospider007/websocket v0.0.0-20250221154625-dbca4eba1fab
github.com/quic-go/quic-go v0.50.0
github.com/refraction-networking/uquic v0.0.6
@@ -46,7 +46,7 @@ require (
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.18.0 // indirect
github.com/klauspost/cpuid/v2 v2.2.9 // indirect
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
github.com/klauspost/pgzip v1.2.6 // indirect
github.com/libdns/libdns v0.2.3 // indirect
github.com/mholt/acmez/v3 v3.0.1 // indirect
@@ -66,13 +66,13 @@ require (
github.com/tidwall/sjson v1.2.5 // indirect
github.com/ulikunitz/xz v0.5.12 // indirect
github.com/zeebo/blake3 v0.2.4 // indirect
go.mongodb.org/mongo-driver v1.17.2 // indirect
go.mongodb.org/mongo-driver v1.17.3 // indirect
go.uber.org/mock v0.5.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
go.uber.org/zap/exp v0.3.0 // indirect
go4.org v0.0.0-20230225012048-214862532bf5 // indirect
golang.org/x/crypto v0.34.0 // indirect
golang.org/x/crypto v0.35.0 // indirect
golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa // indirect
golang.org/x/image v0.24.0 // indirect
golang.org/x/mod v0.23.0 // indirect

14
go.sum
View File

@@ -59,6 +59,7 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -108,8 +109,12 @@ github.com/gospider007/gtls v0.0.0-20250217075148-cad34209c0ae h1:w0FETfH2q/N1B8
github.com/gospider007/gtls v0.0.0-20250217075148-cad34209c0ae/go.mod h1:VoExB3KZrF8CwtvNfLWtLG5OcDWElgQ3dsjs/C+6f04=
github.com/gospider007/http2 v0.0.0-20250221154021-1366bc240764 h1:MYeVyTA++3l5YeXjEFHfYU3II7ufZSplHIlE6pW31Gc=
github.com/gospider007/http2 v0.0.0-20250221154021-1366bc240764/go.mod h1:2+tAfJBMjihghMV0c09jA6kScoRn3hBQxgVM1ntMLqQ=
github.com/gospider007/http2 v0.0.0-20250226135657-bd12c18bfa85 h1:8HbRWRJacp7fkL1svCYru3UX7wnyrEw5UkDIoLlhFKQ=
github.com/gospider007/http2 v0.0.0-20250226135657-bd12c18bfa85/go.mod h1:2+tAfJBMjihghMV0c09jA6kScoRn3hBQxgVM1ntMLqQ=
github.com/gospider007/http3 v0.0.0-20250221154026-be54f80e5184 h1:eoreZ2QcnMOqFoswlNJeJWzfberRLngXn0z+TArhUow=
github.com/gospider007/http3 v0.0.0-20250221154026-be54f80e5184/go.mod h1:qxy521ewxMMvL7Vr4e45mSqSZuWzO978WqYGEIrTa5I=
github.com/gospider007/http3 v0.0.0-20250226135718-f7f291b88480 h1:nBiIJNsMXonhivkXKU29WBo9hJctR1lcMPLThuwDMcI=
github.com/gospider007/http3 v0.0.0-20250226135718-f7f291b88480/go.mod h1:qxy521ewxMMvL7Vr4e45mSqSZuWzO978WqYGEIrTa5I=
github.com/gospider007/ja3 v0.0.0-20250221154036-c583ec1f60a4 h1:965mrrn3KPilX8wjNqnFS/6WybVbK9JVoDbeOy7EMVo=
github.com/gospider007/ja3 v0.0.0-20250221154036-c583ec1f60a4/go.mod h1:nSdl4OoJTcSQm0UXDkxhID/fBdn5yOby3fyCMrl+Xkk=
github.com/gospider007/kinds v0.0.0-20250217075226-10f199f7215d h1:+Fih572EdNmYCK1L82MyWOj9tAwIgZ2JqepmasAclg8=
@@ -122,6 +127,8 @@ github.com/gospider007/re v0.0.0-20250217075352-bcb79f285d6c h1:8/Cf+c2680tkWJ+u
github.com/gospider007/re v0.0.0-20250217075352-bcb79f285d6c/go.mod h1:dd8aDIUG1vDPP5r+vHBtiUK0Zn6uk3SsWt1ZvmCCHLs=
github.com/gospider007/tools v0.0.0-20250221154605-e0d63fd3e79b h1:4Vamrbjg14m49Edhw8etVrowBilbDqv/S0pKnMXOVls=
github.com/gospider007/tools v0.0.0-20250221154605-e0d63fd3e79b/go.mod h1:7D9VPN+5ZUvoX0EnI5ksmaOrXfZpF+n2bKR9DlInBAU=
github.com/gospider007/tools v0.0.0-20250226135821-5d2fbfa9054d h1:Kbzt9ceuK1OhqFwTehmjrwG38weQ9DRtJQoWsUeL8sQ=
github.com/gospider007/tools v0.0.0-20250226135821-5d2fbfa9054d/go.mod h1:7D9VPN+5ZUvoX0EnI5ksmaOrXfZpF+n2bKR9DlInBAU=
github.com/gospider007/websocket v0.0.0-20250221154625-dbca4eba1fab h1:Cqxnb3BZwwQUnx5RX4NKZGpmNjdVSWdzfVMt24GhRsc=
github.com/gospider007/websocket v0.0.0-20250221154625-dbca4eba1fab/go.mod h1:j3vzSZFDOYqtJrEZ3m3XRCFBFnZrton9CeQgRN81ffs=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -145,6 +152,8 @@ github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYW
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY=
github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8=
github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU=
github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
@@ -155,6 +164,7 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/libdns/libdns v0.2.3 h1:ba30K4ObwMGB/QTmqUxf3H4/GmUrCAIkMWejeGl12v8=
github.com/libdns/libdns v0.2.3/go.mod h1:4Bj9+5CQiNMVGf87wjX4CY3HQJypUHRuLvlsfsZqLWQ=
github.com/mholt/acmez v1.2.0 h1:1hhLxSgY5FvH5HCnGUuwbKY2VQVo8IU7rxXKSnZ7F30=
github.com/mholt/acmez/v3 v3.0.1 h1:4PcjKjaySlgXK857aTfDuRbmnM5gb3Ruz3tvoSJAUp8=
github.com/mholt/acmez/v3 v3.0.1/go.mod h1:L1wOU06KKvq7tswuMDwKdcHeKpFFgkppZy/y0DFxagQ=
github.com/mholt/archives v0.1.0 h1:FacgJyrjiuyomTuNA92X5GyRBRZjE43Y/lrzKIlF35Q=
@@ -226,6 +236,8 @@ github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo=
github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4=
go.mongodb.org/mongo-driver v1.17.2 h1:gvZyk8352qSfzyZ2UMWcpDpMSGEr1eqE4T793SqyhzM=
go.mongodb.org/mongo-driver v1.17.2/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
go.mongodb.org/mongo-driver v1.17.3 h1:TQyXhnsWfWtgAhMtOgtYHMTkZIfBTpMTsMnd9ZBeHxQ=
go.mongodb.org/mongo-driver v1.17.3/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@@ -253,6 +265,8 @@ golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/crypto v0.34.0 h1:+/C6tk6rf/+t5DhUketUbD1aNGqiSX3j15Z6xuIDlBA=
golang.org/x/crypto v0.34.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=

View File

@@ -221,6 +221,9 @@ func (obj *conn2) run() (err error) {
obj.keepSendDisable()
go obj.httpWrite(task, task.req.Header.Clone())
task.res, task.err = http.ReadResponse(obj.r, nil)
if task.res != nil {
task.res.Request = task.req
}
if task.res != nil && task.res.Body != nil && task.err == nil {
rawBody := task.res.Body
pr, pw := io.Pipe()
@@ -354,7 +357,6 @@ func (obj *conn2) Stream() io.ReadWriteCloser {
r: obj.r,
w: obj.conn,
}
// return obj.conn
}
func (obj *conn2) httpWrite(task *httpTask, rawHeaders http.Header) {
defer func() {

View File

@@ -321,6 +321,7 @@ func (obj *Response) IsSSE() bool {
// read body
func (obj *Response) ReadBody() (err error) {
obj.readBodyLock.Lock()
defer obj.readBodyLock.Unlock()
if obj.readBody {
return nil
}
@@ -333,7 +334,6 @@ func (obj *Response) ReadBody() (err error) {
obj.webSocket = websocket.NewClientConn(newFakeConn(obj.rawConn.connStream()), websocket.GetResponseHeaderOption(obj.response.Header))
}
}
obj.readBodyLock.Unlock()
}()
obj.readBody = true
bBody := bytes.NewBuffer(nil)

View File

@@ -270,9 +270,6 @@ func (obj *roundTripper) dialConnecotr(ctx *Response, conne *connecotr, h2 bool)
conne.Conn = newConn2(conne.forceCtx, conne.c, func(err error) {
conne.forceCnl(tools.WrapError(err, "http1 client close"))
})
// conne.Conn = newRoudTrip(conne.forceCtx, conne.c, func(err error) {
// conne.forceCnl(tools.WrapError(err, "http1 client close"))
// })
}
return err
}
@@ -376,7 +373,7 @@ func (obj *roundTripper) newRoudTrip(task *reqTask) {
task.reqCtx.isNewConn = true
conn, err := obj.dial(task.reqCtx)
if err != nil {
task.err = err
task.err = tools.WrapError(err, "newRoudTrip dial error")
if task.reqCtx.option.ErrCallBack != nil {
task.reqCtx.err = err
if err2 := task.reqCtx.option.ErrCallBack(task.reqCtx); err2 != nil {

View File

@@ -198,8 +198,6 @@ func NewRequestWithContext(ctx context.Context, method string, u *url.URL, body
if body != nil {
if v, ok := body.(interface{ Len() int }); ok {
req.ContentLength = int64(v.Len())
} else {
req.ContentLength = -1
}
if _, ok := body.(io.Seeker); ok {
req.Body = &requestBody{body}
@@ -208,8 +206,6 @@ func NewRequestWithContext(ctx context.Context, method string, u *url.URL, body
} else {
req.Body = io.NopCloser(body)
}
} else {
req.ContentLength = -1
}
return req, nil
}