8
8
"net/http"
9
9
"net/http/cookiejar"
10
10
"net/url"
11
+ "time"
11
12
12
13
"github.com/OpenListTeam/OpenList/v4/pkg/utils"
13
14
)
@@ -35,9 +36,21 @@ func New(webuiUrl string) (Client, error) {
35
36
if err != nil {
36
37
return nil , err
37
38
}
39
+
40
+ transport := & http.Transport {
41
+ MaxIdleConns : 10 ,
42
+ MaxIdleConnsPerHost : 2 ,
43
+ IdleConnTimeout : 30 * time .Second ,
44
+ DisableKeepAlives : false , // Enable connection reuse
45
+ }
46
+
38
47
var c = & client {
39
- url : u ,
40
- client : http.Client {Jar : jar },
48
+ url : u ,
49
+ client : http.Client {
50
+ Jar : jar ,
51
+ Transport : transport ,
52
+ Timeout : 30 * time .Second , // Set overall timeout
53
+ },
41
54
}
42
55
43
56
err = c .checkAuthorization ()
@@ -69,6 +82,7 @@ func (c *client) authorized() bool {
69
82
if err != nil {
70
83
return false
71
84
}
85
+ defer resp .Body .Close ()
72
86
return resp .StatusCode == 200 // the status code will be 403 if not authorized
73
87
}
74
88
@@ -82,6 +96,7 @@ func (c *client) login() error {
82
96
if err != nil {
83
97
return err
84
98
}
99
+ defer resp .Body .Close ()
85
100
86
101
// check result
87
102
body := make ([]byte , 2 )
@@ -157,6 +172,7 @@ func (c *client) AddFromLink(link string, savePath string, id string) error {
157
172
if err != nil {
158
173
return err
159
174
}
175
+ defer resp .Body .Close ()
160
176
161
177
// check result
162
178
body := make ([]byte , 2 )
@@ -271,6 +287,7 @@ func (c *client) GetInfo(id string) (TorrentInfo, error) {
271
287
if err != nil {
272
288
return TorrentInfo {}, err
273
289
}
290
+ defer response .Body .Close ()
274
291
275
292
body , err := io .ReadAll (response .Body )
276
293
if err != nil {
@@ -316,6 +333,7 @@ func (c *client) GetFiles(id string) ([]FileInfo, error) {
316
333
if err != nil {
317
334
return []FileInfo {}, err
318
335
}
336
+ defer response .Body .Close ()
319
337
320
338
body , err := io .ReadAll (response .Body )
321
339
if err != nil {
@@ -345,21 +363,23 @@ func (c *client) Delete(id string, deleteFiles bool) error {
345
363
} else {
346
364
v .Set ("deleteFiles" , "false" )
347
365
}
348
- response , err := c .post ("/api/v2/torrents/delete" , v )
366
+ deleteResp , err := c .post ("/api/v2/torrents/delete" , v )
349
367
if err != nil {
350
368
return err
351
369
}
352
- if response .StatusCode != 200 {
370
+ defer deleteResp .Body .Close ()
371
+ if deleteResp .StatusCode != 200 {
353
372
return errors .New ("failed to delete qbittorrent task" )
354
373
}
355
374
356
375
v = url.Values {}
357
376
v .Set ("tags" , "openlist-" + id )
358
- response , err = c .post ("/api/v2/torrents/deleteTags" , v )
377
+ deleteTagsResp , err : = c .post ("/api/v2/torrents/deleteTags" , v )
359
378
if err != nil {
360
379
return err
361
380
}
362
- if response .StatusCode != 200 {
381
+ defer deleteTagsResp .Body .Close ()
382
+ if deleteTagsResp .StatusCode != 200 {
363
383
return errors .New ("failed to delete qbittorrent tag" )
364
384
}
365
385
return nil
0 commit comments