This commit is contained in:
gospider
2025-06-12 22:26:55 +08:00
parent a60b8c39fe
commit a4baa44fbd
5 changed files with 52 additions and 38 deletions

View File

@@ -6,9 +6,11 @@ import (
"io"
"net"
"strings"
"sync"
"time"
"github.com/klauspost/compress/zstd"
"github.com/mholt/archives"
)
type CompressionConn struct {
@@ -41,32 +43,37 @@ const (
CompressionLevelBest CompressionLevel = 2
)
func NewCompression(decode string, leval CompressionLevel) (Compression, error) {
func NewCompression(decode string) (Compression, error) {
var arch Compression
switch strings.ToLower(decode) {
case "zstd":
options := []zstd.EOption{}
options2 := []zstd.DOption{}
switch leval {
case CompressionLevelFast:
options = append(options, zstd.WithEncoderLevel(zstd.SpeedFastest), zstd.WithZeroFrames(true), zstd.WithLowerEncoderMem(true))
options2 = append(options2, zstd.WithDecoderLowmem(true))
case CompressionLevelBest:
options = append(options, zstd.WithEncoderLevel(zstd.SpeedBetterCompression))
default:
options = append(options, zstd.WithEncoderLevel(zstd.SpeedDefault), zstd.WithZeroFrames(true), zstd.WithLowerEncoderMem(true))
options2 = append(options2, zstd.WithDecoderLowmem(true))
}
case "s2":
arch = compression{
openReader: func(r io.Reader) (io.ReadCloser, error) {
decoder, err := zstd.NewReader(r, options2...)
return archives.Sz{
S2: archives.S2{
Compression: archives.S2LevelBetter,
},
}.OpenReader(r)
},
openWriter: func(w io.Writer) (io.WriteCloser, error) {
return archives.Sz{
S2: archives.S2{
Compression: archives.S2LevelBetter,
},
}.OpenWriter(w)
},
}
case "zstd":
arch = compression{
openReader: func(r io.Reader) (io.ReadCloser, error) {
decoder, err := zstd.NewReader(r)
if err != nil {
return nil, err
}
return decoder.IOReadCloser(), nil
},
openWriter: func(w io.Writer) (io.WriteCloser, error) {
encoder, err := zstd.NewWriter(w, options...)
encoder, err := zstd.NewWriter(nil, zstd.WithEncoderLevel(zstd.SpeedDefault))
if err != nil {
return nil, err
}
@@ -117,10 +124,10 @@ func NewCompressionConn(conn net.Conn, arch Compression) (net.Conn, error) {
conn: conn,
r: r,
w: w,
// oneFunc: sync.OnceFunc(func() {
// defer recover()
// w.Close()
// }),
oneFunc: sync.OnceFunc(func() {
defer recover()
w.Close()
}),
}
if f, ok := w.(interface{ Flush() error }); ok {
ccon.f = f

11
dial.go
View File

@@ -169,6 +169,17 @@ func (obj *Dialer) DialProxyContext(ctx *Response, network string, proxyTlsConfi
}
}
packCon, conn, err = obj.verifyProxyToRemote(ctx, conn, proxyTlsConfig, oneProxy, remoteUrl, index == proxyLen-2, true)
if err != nil {
break
}
}
if err != nil {
if conn != nil {
conn.Close()
}
if packCon != nil {
packCon.Close()
}
}
return packCon, conn, err
}

13
go.mod
View File

@@ -5,15 +5,16 @@ go 1.24.0
require (
github.com/gospider007/bar v0.0.0-20250217074946-47896d8de2ba
github.com/gospider007/bs4 v0.0.0-20250413121342-fed910fb00c9
github.com/gospider007/gson v0.0.0-20250530002642-aee7c1b761df
github.com/gospider007/gson v0.0.0-20250611163241-fa021e9c5531
github.com/gospider007/gtls v0.0.0-20250610060422-446e017b9858
github.com/gospider007/http2 v0.0.0-20250427082905-4aed0707e580
github.com/gospider007/http3 v0.0.0-20250416085920-b642f3f91f47
github.com/gospider007/http2 v0.0.0-20250611163252-ee5823d0f04a
github.com/gospider007/http3 v0.0.0-20250611163115-77b77de7a3f9
github.com/gospider007/ja3 v0.0.0-20250427082442-f7dc5fb959e6
github.com/gospider007/re v0.0.0-20250217075352-bcb79f285d6c
github.com/gospider007/tools v0.0.0-20250610060552-2e45eaa25022
github.com/gospider007/tools v0.0.0-20250611120310-b7d5692a72bf
github.com/gospider007/websocket v0.0.0-20250429035144-b1cf6819063a
github.com/klauspost/compress v1.18.0
github.com/mholt/archives v0.1.2
github.com/quic-go/quic-go v0.52.0
github.com/refraction-networking/uquic v0.0.6
github.com/refraction-networking/utls v1.7.3
@@ -37,7 +38,6 @@ require (
github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 // indirect
github.com/gaukas/clienthellod v0.4.2 // indirect
github.com/gaukas/godicttls v0.0.4 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
github.com/gobwas/httphead v0.1.0 // indirect
github.com/gobwas/pool v0.2.1 // indirect
@@ -53,7 +53,6 @@ require (
github.com/kr/pretty v0.3.1 // indirect
github.com/libdns/libdns v1.1.0 // indirect
github.com/mholt/acmez/v3 v3.1.2 // indirect
github.com/mholt/archives v0.1.2 // indirect
github.com/miekg/dns v1.1.66 // indirect
github.com/minio/minlz v1.0.1 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
@@ -86,7 +85,5 @@ require (
golang.org/x/sync v0.15.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/text v0.26.0 // indirect
golang.org/x/time v0.11.0 // indirect
golang.org/x/tools v0.34.0 // indirect
google.golang.org/protobuf v1.36.6 // indirect
)

16
go.sum
View File

@@ -108,22 +108,22 @@ github.com/gospider007/blog v0.0.0-20250302134054-8afc12c2a9a7 h1:QP46FdP6nJET+b
github.com/gospider007/blog v0.0.0-20250302134054-8afc12c2a9a7/go.mod h1:yDzKXJzaYENfMvleqwdo362NE+BXDhwtKXRUQUWHH+I=
github.com/gospider007/bs4 v0.0.0-20250413121342-fed910fb00c9 h1:V/Fuzox1GNZzlZCY548Na3mdfjLmWoSqexa53d3dKyE=
github.com/gospider007/bs4 v0.0.0-20250413121342-fed910fb00c9/go.mod h1:KBnaNWpVupRQbPZ6jz2jhX/hnRK1w30RKJvl3Micjws=
github.com/gospider007/gson v0.0.0-20250530002642-aee7c1b761df h1:Xi1Sm1caw39tXUVZAuVAVSdJ9x7h0Y1bPOw3sxxkzsM=
github.com/gospider007/gson v0.0.0-20250530002642-aee7c1b761df/go.mod h1:+O/+tzjrqz67RehAyJaRApESHo1Z9fuxBeQmQ8GMELw=
github.com/gospider007/gson v0.0.0-20250611163241-fa021e9c5531 h1:dzUU4p3u9eaY1vlJFUXueuyuFX+AirdOtrWf/4Z8WfU=
github.com/gospider007/gson v0.0.0-20250611163241-fa021e9c5531/go.mod h1:YO6h5iR/nAFAaZ34JJbkJPuMG2nq2mShKWI7llEWRQA=
github.com/gospider007/gtls v0.0.0-20250610060422-446e017b9858 h1:Tb+T5YfysjR7Mp22AgrJhMPF28KBgjWkbKj2zi8AyBU=
github.com/gospider007/gtls v0.0.0-20250610060422-446e017b9858/go.mod h1:SxhMpxq4EYHlUre2EdQ4dKKGZyvj7+1PYZ2LQ9RO0y4=
github.com/gospider007/http2 v0.0.0-20250427082905-4aed0707e580 h1:JLZeCin6giqOV3sAy7BGqFkc+qHvO389O/aTT5JJc1k=
github.com/gospider007/http2 v0.0.0-20250427082905-4aed0707e580/go.mod h1:WH7RqG9ecX15uAhzZDr5cbTaTPZST3ST0X4okNDSR5I=
github.com/gospider007/http3 v0.0.0-20250416085920-b642f3f91f47 h1:dpV6hkUeMbZrCZSaR99u6TNXry9M3FSga+9CmjZ5Zmo=
github.com/gospider007/http3 v0.0.0-20250416085920-b642f3f91f47/go.mod h1:9JjUDTG3PcsH7FBF0VgJIK3x3pn5Goq9no91rAotvKs=
github.com/gospider007/http2 v0.0.0-20250611163252-ee5823d0f04a h1:OtgLN7N2rFHxF1HXutXeY33bzNAZ/npzQQ4JlaDZk+8=
github.com/gospider007/http2 v0.0.0-20250611163252-ee5823d0f04a/go.mod h1:r0XfXyaHynGBLi0o7SN6KxPL0V7q5sX2JVvk2ISDyH0=
github.com/gospider007/http3 v0.0.0-20250611163115-77b77de7a3f9 h1:6OiYSTsyrabSDV0dj5SpAGenpPm8VA20fD/FVzrx/TM=
github.com/gospider007/http3 v0.0.0-20250611163115-77b77de7a3f9/go.mod h1:FObAlfJRtytX4nI47Ra+j2mKoJlUmxfraqpeOBX2Bi0=
github.com/gospider007/ja3 v0.0.0-20250427082442-f7dc5fb959e6 h1:HA1+KhAvM/ifeyR7wdxYV6Ilg2QCQtflGAmkgrgim8Y=
github.com/gospider007/ja3 v0.0.0-20250427082442-f7dc5fb959e6/go.mod h1:xmgdol7ucS7vLvRzedImp09Yi0alKCp76cX+Cm/UVQI=
github.com/gospider007/kinds v0.0.0-20250217075226-10f199f7215d h1:+Fih572EdNmYCK1L82MyWOj9tAwIgZ2JqepmasAclg8=
github.com/gospider007/kinds v0.0.0-20250217075226-10f199f7215d/go.mod h1:3u6J+nbdWhCNJGiQjq/hKSukn2k6ebjd98rd2+fzKNo=
github.com/gospider007/re v0.0.0-20250217075352-bcb79f285d6c h1:8/Cf+c2680tkWJ+ueZ9RLLK5R5R8nhE8pNBUPHjkvkM=
github.com/gospider007/re v0.0.0-20250217075352-bcb79f285d6c/go.mod h1:dd8aDIUG1vDPP5r+vHBtiUK0Zn6uk3SsWt1ZvmCCHLs=
github.com/gospider007/tools v0.0.0-20250610060552-2e45eaa25022 h1:IPoXe0+GyHjiIPn0Qy7nElpJ81awXUWrCoNholizqV4=
github.com/gospider007/tools v0.0.0-20250610060552-2e45eaa25022/go.mod h1:x7fyDzsG7lPJO6Q3D6DIzdUA+J9RAQoyOdmcP1XQF1k=
github.com/gospider007/tools v0.0.0-20250611120310-b7d5692a72bf h1:pjI49A7tZuZpxaAd7j+ZGVOCAblAoR4gbr7fau5UNg0=
github.com/gospider007/tools v0.0.0-20250611120310-b7d5692a72bf/go.mod h1:x7fyDzsG7lPJO6Q3D6DIzdUA+J9RAQoyOdmcP1XQF1k=
github.com/gospider007/websocket v0.0.0-20250429035144-b1cf6819063a h1:DJMk+oALIJg3ArN5/DIPrQagWQL1Qi/c3DlXT9l1dGo=
github.com/gospider007/websocket v0.0.0-20250429035144-b1cf6819063a/go.mod h1:0yVYF7b5kRayyUzAVgg6h1x+eZujKoSaA4n2krG5F7g=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=

View File

@@ -257,7 +257,7 @@ func (obj *roundTripper) dial(ctx *Response) (conn *connecotr, err error) {
if len(proxys) > 0 {
comp := proxys[len(proxys)-1]
if comp.Compression != "" {
arch, err = NewCompression(comp.Compression, CompressionLevelBest)
arch, err = NewCompression(comp.Compression)
if err != nil {
return nil, err
}
@@ -459,7 +459,6 @@ func (obj *roundTripper) RoundTrip(ctx *Response) (err error) {
return err
}
err = obj.poolRoundTrip(task)
// log.Print(err)
if err == nil || !task.suppertRetry() {
break
}