This commit is contained in:
gospider
2025-01-08 09:38:25 +08:00
parent 955b0c967c
commit b2654b8c61
4 changed files with 30 additions and 160 deletions

10
go.mod
View File

@@ -6,11 +6,11 @@ require (
github.com/gospider007/bar v0.0.0-20241205091858-06f3c7e16dd9
github.com/gospider007/bs4 v0.0.0-20241216122612-aa3f29179e6f
github.com/gospider007/gson v0.0.0-20241216122450-fb66d0ba2a07
github.com/gospider007/gtls v0.0.0-20250102091721-c5d429cea809
github.com/gospider007/http2 v0.0.0-20241222151842-034aa1d46e9d
github.com/gospider007/http3 v0.0.0-20250102093206-281d03368c89
github.com/gospider007/gtls v0.0.0-20250107100054-2a14fa6fc9c5
github.com/gospider007/http2 v0.0.0-20250107095809-0f8c60040d4a
github.com/gospider007/http3 v0.0.0-20250107095941-a36b210aca37
github.com/gospider007/ja3 v0.0.0-20250107091445-e294e50de314
github.com/gospider007/proxy v0.0.0-20250103020907-1a1fa54066e4
github.com/gospider007/proxy v0.0.0-20250108001210-7c1a3d5eabb6
github.com/gospider007/re v0.0.0-20241216142712-efbef8d55ea2
github.com/gospider007/tools v0.0.0-20250107090942-5b406ab8a72b
github.com/gospider007/websocket v0.0.0-20250107091829-c78035a103b2
@@ -66,7 +66,7 @@ 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.1 // indirect
go.mongodb.org/mongo-driver v1.17.2 // 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

20
go.sum
View File

@@ -104,20 +104,20 @@ github.com/gospider007/bs4 v0.0.0-20241216122612-aa3f29179e6f h1:/pbT94pif600rZw
github.com/gospider007/bs4 v0.0.0-20241216122612-aa3f29179e6f/go.mod h1:M3XPdOCrwkB1UJiaF506o8KCDpRKnkzZBQ5PWitVc90=
github.com/gospider007/gson v0.0.0-20241216122450-fb66d0ba2a07 h1:cqsuxxIKxbRG/xRPNwgFUfvGKc992snPjn5WlXkCtnA=
github.com/gospider007/gson v0.0.0-20241216122450-fb66d0ba2a07/go.mod h1:XcFiXq3t2+b1x9zezQV/FbuB5Y1rdUrtvpJRbxZXef4=
github.com/gospider007/gtls v0.0.0-20250102091721-c5d429cea809 h1:77XBmuHNxogRA6hXEf9mNczj1t88El0/qLUPqaYAyZ4=
github.com/gospider007/gtls v0.0.0-20250102091721-c5d429cea809/go.mod h1:QDqmcdji96nHRCfyMpZK3TX2s3O3BX3GcjJC2uqttSY=
github.com/gospider007/http2 v0.0.0-20241222151842-034aa1d46e9d h1:HJv2HOsvZ+7yf+6cxqGL/DWPQx//6hyLOmoECsh0OBk=
github.com/gospider007/http2 v0.0.0-20241222151842-034aa1d46e9d/go.mod h1:b8VbmpEUTyGR8B8h4MGY2E/5klXqs/WziEgTZx5kU3I=
github.com/gospider007/http3 v0.0.0-20250102093206-281d03368c89 h1:385FtT3O5xBn8jd5a817beXoMUuvpzAbFDIQkcq/p+w=
github.com/gospider007/http3 v0.0.0-20250102093206-281d03368c89/go.mod h1:SxK+7jYxg+eqFL5I5jQsKpagfR1u1YySI0LTCcagCbo=
github.com/gospider007/gtls v0.0.0-20250107100054-2a14fa6fc9c5 h1:c0payCC+agt1c+SK66VYXcs8eFktGlxWhK+t6V/6PPc=
github.com/gospider007/gtls v0.0.0-20250107100054-2a14fa6fc9c5/go.mod h1:qIlB6X0WLv9QVqo/LLqkml0JDKSjeL3x4tI1QCINU94=
github.com/gospider007/http2 v0.0.0-20250107095809-0f8c60040d4a h1:Gx/aemk7BFyjguVXWS9oxNHjhmcz67gtGNbNyVaahOE=
github.com/gospider007/http2 v0.0.0-20250107095809-0f8c60040d4a/go.mod h1:3uzGktvy4KnYZm+DwWNui4RsvPUQSSphJ1VTtfO1tE0=
github.com/gospider007/http3 v0.0.0-20250107095941-a36b210aca37 h1:i9WhiyjKwaU2imUof0i95WhcGCx8HHTTCnkHzEIlWq8=
github.com/gospider007/http3 v0.0.0-20250107095941-a36b210aca37/go.mod h1:6zmeD45uQFfHLWTsgAUP4FXgdj6MUTGyQar091dTDtw=
github.com/gospider007/ja3 v0.0.0-20250107091445-e294e50de314 h1:HAdIVngGI5Hj7tSF5nV0YCze+G24ck+9qGf5H/VT4hw=
github.com/gospider007/ja3 v0.0.0-20250107091445-e294e50de314/go.mod h1:LyhufzO6wrBlxeilbUJElfEdDNdD+1v9fB5p30pDAjE=
github.com/gospider007/kinds v0.0.0-20240929092451-8f867acde255 h1:X+AM/mgmh/EfyQUjKZp1VFc9TSlrhkwS0eSYeo5fMs4=
github.com/gospider007/kinds v0.0.0-20240929092451-8f867acde255/go.mod h1:yZx7Zfp1I4P6CO3TcDyDY5SuXQYr0bZjzT9zG0XrJAI=
github.com/gospider007/net v0.0.0-20241216130419-175071962ced h1:vQfZkebsHLjxDk9Wg3neaIsgtyARNmkgrHsh+WroAVY=
github.com/gospider007/net v0.0.0-20241216130419-175071962ced/go.mod h1:GrNK3zEmo7N9nuAcOOu4GFw+kvfkYaOMiRSOm38CH7o=
github.com/gospider007/proxy v0.0.0-20250103020907-1a1fa54066e4 h1:wawLXebVhD2694M7fsw1B70Ocnm5TOuTr9una1mJkIk=
github.com/gospider007/proxy v0.0.0-20250103020907-1a1fa54066e4/go.mod h1:xn8FKZw+YH6rd+aOZiE3PRPKFzW+bdCMKzIcG8L1C78=
github.com/gospider007/proxy v0.0.0-20250108001210-7c1a3d5eabb6 h1:FYD97bdMjSoKuhnRy/m1jPmbtgh0Mvk/9SyrH6VDQOU=
github.com/gospider007/proxy v0.0.0-20250108001210-7c1a3d5eabb6/go.mod h1:058+64s2TFP/IoAjsLMpjNa8tduvhDfUP68W6xH82XU=
github.com/gospider007/re v0.0.0-20241216142712-efbef8d55ea2 h1:ixXFS1DqP0NnHna+b0JKaPqMRYRmahzUADZn7PawQq0=
github.com/gospider007/re v0.0.0-20241216142712-efbef8d55ea2/go.mod h1:kr9bUaC42FS019Ak23fSctbTRB2JpfPPg/pSVjQmsws=
github.com/gospider007/tools v0.0.0-20250107090942-5b406ab8a72b h1:iiAxiufROgDsuQInI6dAx1CG3m7nMMj3C0SAE84oY7g=
@@ -221,8 +221,8 @@ github.com/zeebo/blake3 v0.2.4 h1:KYQPkhpRtcqh0ssGYcKLG1JYvddkEA8QwCM/yBqhaZI=
github.com/zeebo/blake3 v0.2.4/go.mod h1:7eeQ6d2iXWRGF6npfaxl2CU+xy2Fjo2gxeyZGCRUjcE=
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.1 h1:Wic5cJIwJgSpBhe3lx3+/RybR5PiYRMpVFgO7cOHyIM=
go.mongodb.org/mongo-driver v1.17.1/go.mod h1:wwWm/+BuOddhcq3n68LKRmgk2wXzmF6s0SFOa0GINL4=
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.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=

148
option.go
View File

@@ -11,6 +11,8 @@ import (
"github.com/gospider007/ja3"
"github.com/gospider007/tools"
"github.com/gospider007/websocket"
"github.com/quic-go/quic-go"
uquic "github.com/refraction-networking/uquic"
utls "github.com/refraction-networking/utls"
)
@@ -76,6 +78,9 @@ type ClientOption struct {
Jar Jar //custom cookies
TlsConfig *tls.Config
UtlsConfig *utls.Config
QuicConfig *quic.Config
UquicConfig *uquic.Config
}
// Options for sending requests
@@ -238,146 +243,3 @@ func (obj *Client) newRequestOption(option RequestOption) (RequestOption, error)
}
return option, err
}
// func (obj *Client) newRequestOption(option RequestOption) RequestOption {
// // start
// if !option.Ja3Spec.IsSet() {
// option.Ja3Spec = obj.option.Ja3Spec
// }
// if !option.Ja3 {
// option.Ja3 = obj.option.Ja3
// }
// if !option.UJa3Spec.IsSet() {
// option.UJa3Spec = obj.option.UJa3Spec
// }
// if !option.H2Ja3Spec.IsSet() {
// option.H2Ja3Spec = obj.option.H2Ja3Spec
// }
// if option.Proxy == "" {
// option.Proxy = obj.option.Proxy
// }
// if len(option.Proxys) == 0 {
// option.Proxys = obj.option.Proxys
// }
// if !option.ForceHttp1 {
// option.ForceHttp1 = obj.option.ForceHttp1
// }
// if !option.DisCookie {
// option.DisCookie = obj.option.DisCookie
// }
// if !option.DisDecode {
// option.DisDecode = obj.option.DisDecode
// }
// if !option.DisUnZip {
// option.DisUnZip = obj.option.DisUnZip
// }
// if !option.Bar {
// option.Bar = obj.option.Bar
// }
// if !option.H3 {
// option.H3 = obj.option.H3
// }
// if option.Logger == nil {
// option.Logger = obj.option.Logger
// }
// if option.Headers == nil {
// option.Headers = obj.option.Headers
// }
// if option.Timeout == 0 {
// option.Timeout = obj.option.Timeout
// }
// if option.ResponseHeaderTimeout == 0 {
// option.ResponseHeaderTimeout = obj.option.ResponseHeaderTimeout
// }
// if option.TlsHandshakeTimeout == 0 {
// option.TlsHandshakeTimeout = obj.option.TlsHandshakeTimeout
// }
// if option.TlsConfig == nil {
// option.TlsConfig = obj.option.TlsConfig
// }
// if option.UtlsConfig == nil {
// option.UtlsConfig = obj.option.UtlsConfig
// }
// if option.OrderHeaders == nil {
// option.OrderHeaders = obj.option.OrderHeaders
// }
// if option.OptionCallBack == nil {
// option.OptionCallBack = obj.option.OptionCallBack
// }
// if option.ResultCallBack == nil {
// option.ResultCallBack = obj.option.ResultCallBack
// }
// if option.ErrCallBack == nil {
// option.ErrCallBack = obj.option.ErrCallBack
// }
// if option.RequestCallBack == nil {
// option.RequestCallBack = obj.option.RequestCallBack
// }
// if option.MaxRetries == 0 {
// option.MaxRetries = obj.option.MaxRetries
// }
// if option.MaxRedirect == 0 {
// option.MaxRedirect = obj.option.MaxRedirect
// }
// if option.Headers == nil {
// option.Headers = obj.option.Headers
// }
// if option.Timeout == 0 {
// option.Timeout = obj.option.Timeout
// }
// if option.ResponseHeaderTimeout == 0 {
// option.ResponseHeaderTimeout = obj.option.ResponseHeaderTimeout
// }
// if option.TlsHandshakeTimeout == 0 {
// option.TlsHandshakeTimeout = obj.option.TlsHandshakeTimeout
// }
// if option.DialOption.DialTimeout == 0 {
// option.DialOption.DialTimeout = obj.option.DialOption.DialTimeout
// }
// if option.DialOption.KeepAlive == 0 {
// option.DialOption.KeepAlive = obj.option.DialOption.KeepAlive
// }
// if option.DialOption.LocalAddr == nil {
// option.DialOption.LocalAddr = obj.option.DialOption.LocalAddr
// }
// if option.DialOption.AddrType == 0 {
// option.DialOption.AddrType = obj.option.DialOption.AddrType
// }
// if option.DialOption.Dns == nil {
// option.DialOption.Dns = obj.option.DialOption.Dns
// }
// if option.DialOption.GetAddrType == nil {
// option.DialOption.GetAddrType = obj.option.DialOption.GetAddrType
// }
// if option.Jar == nil {
// option.Jar = obj.option.Jar
// }
// //end
// if option.MaxRetries < 0 {
// option.MaxRetries = 0
// }
// if !option.Ja3Spec.IsSet() && option.Ja3 {
// option.Ja3Spec = ja3.DefaultJa3Spec()
// }
// if !option.UJa3Spec.IsSet() && option.Ja3 {
// option.UJa3Spec = ja3.DefaultUJa3Spec()
// }
// if option.UserAgent == "" {
// option.UserAgent = obj.option.UserAgent
// }
// if option.DisCookie {
// option.Jar = nil
// }
// if option.DisProxy {
// option.Proxy = ""
// }
// if option.GetProxy == nil {
// option.GetProxy = obj.option.GetProxy
// }
// if option.GetProxys == nil {
// option.GetProxys = obj.option.GetProxys
// }
// return option
// }

View File

@@ -117,7 +117,11 @@ func (obj *roundTripper) ghttp3Dial(ctx context.Context, option *RequestOption,
return nil, err
}
}
netConn, err := quic.DialEarly(ctx, udpConn, &net.UDPAddr{IP: remoteAddress.IP, Port: remoteAddress.Port}, tlsConfig, nil)
var quicConfig *quic.Config
if option.UquicConfig != nil {
quicConfig = option.QuicConfig.Clone()
}
netConn, err := quic.DialEarly(ctx, udpConn, &net.UDPAddr{IP: remoteAddress.IP, Port: remoteAddress.Port}, tlsConfig, quicConfig)
conn = obj.newConnecotr()
conn.Conn = http3.NewClient(netConn, func() {
conn.forceCnl(errors.New("http3 client close"))
@@ -143,12 +147,16 @@ func (obj *roundTripper) uhttp3Dial(ctx context.Context, option *RequestOption,
return nil, err
}
}
var quicConfig *uquic.Config
if option.UquicConfig != nil {
quicConfig = option.UquicConfig.Clone()
}
netConn, err := (&uquic.UTransport{
Transport: &uquic.Transport{
Conn: udpConn,
},
QUICSpec: &spec,
}).DialEarly(ctx, &net.UDPAddr{IP: remoteAddress.IP, Port: remoteAddress.Port}, tlsConfig, nil)
}).DialEarly(ctx, &net.UDPAddr{IP: remoteAddress.IP, Port: remoteAddress.Port}, tlsConfig, quicConfig)
conn = obj.newConnecotr()
conn.Conn = http3.NewUClient(netConn, func() {
conn.forceCnl(errors.New("http3 client close"))