@@ -23,6 +23,7 @@ type DownloadConfig struct {
23
23
OutputPath string
24
24
Connections int
25
25
Timeout time.Duration
26
+ KATimeout time.Duration
26
27
ProxyURL string
27
28
UserAgent string
28
29
}
@@ -53,6 +54,35 @@ type DownloadEntry struct {
53
54
URL string `yaml:"link"`
54
55
}
55
56
57
+ func getRandomUserAgent () string {
58
+ userAgents := []string {
59
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" ,
60
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" ,
61
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0" ,
62
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" ,
63
+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" ,
64
+ "Mozilla/5.0 (X11; Linux x86_64; rv:135.0) Gecko/20100101 Firefox/135.0" ,
65
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3 Safari/605.1.15" ,
66
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:135.0) Gecko/20100101 Firefox/135.0" ,
67
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0" ,
68
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" ,
69
+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" ,
70
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" ,
71
+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" ,
72
+ "Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0" ,
73
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Safari/605.1.15" ,
74
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0" ,
75
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0" ,
76
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1.1 Safari/605.1.15" ,
77
+ "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0" ,
78
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 YaBrowser/27.7.7.7 Yowser/2.5 Safari/537.36" ,
79
+ "Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/115.0" ,
80
+ "curl/7.88.1" ,
81
+ "Wget/1.21.4" ,
82
+ }
83
+ return userAgents [time .Now ().UnixNano ()% int64 (len (userAgents ))]
84
+ }
85
+
56
86
func ReadDownloadList (filePath string ) ([]DownloadEntry , error ) {
57
87
log := GetLogger ("config" )
58
88
data , err := os .ReadFile (filePath )
@@ -76,11 +106,11 @@ func ReadDownloadList(filePath string) ([]DownloadEntry, error) {
76
106
return entries , nil
77
107
}
78
108
79
- func createHTTPClient (timeout time.Duration , proxyURL string ) * http.Client {
109
+ func createHTTPClient (timeout time.Duration , keepAliveTO time. Duration , proxyURL string ) * http.Client {
80
110
transport := & http.Transport {
81
111
MaxIdleConns : 100 ,
82
112
MaxIdleConnsPerHost : 100 , // for connection reuse
83
- IdleConnTimeout : 90 * time . Second ,
113
+ IdleConnTimeout : keepAliveTO ,
84
114
DisableCompression : true ,
85
115
MaxConnsPerHost : 0 ,
86
116
// These two seem to reduce performance drastically with custom dial context
0 commit comments