88 "net/http"
99 "net/http/cookiejar"
1010 "net/url"
11+ "time"
1112
1213 "github.com/OpenListTeam/OpenList/v4/pkg/utils"
1314)
@@ -35,9 +36,21 @@ func New(webuiUrl string) (Client, error) {
3536 if err != nil {
3637 return nil , err
3738 }
39+
40+ transport := & http.Transport {
41+ MaxIdleConns : 10 ,
42+ MaxIdleConnsPerHost : 2 ,
43+ IdleConnTimeout : 30 * time .Second ,
44+ DisableKeepAlives : false , // Enable connection reuse
45+ }
46+
3847 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+ },
4154 }
4255
4356 err = c .checkAuthorization ()
@@ -69,6 +82,7 @@ func (c *client) authorized() bool {
6982 if err != nil {
7083 return false
7184 }
85+ defer resp .Body .Close ()
7286 return resp .StatusCode == 200 // the status code will be 403 if not authorized
7387}
7488
@@ -82,6 +96,7 @@ func (c *client) login() error {
8296 if err != nil {
8397 return err
8498 }
99+ defer resp .Body .Close ()
85100
86101 // check result
87102 body := make ([]byte , 2 )
@@ -157,6 +172,7 @@ func (c *client) AddFromLink(link string, savePath string, id string) error {
157172 if err != nil {
158173 return err
159174 }
175+ defer resp .Body .Close ()
160176
161177 // check result
162178 body := make ([]byte , 2 )
@@ -271,6 +287,7 @@ func (c *client) GetInfo(id string) (TorrentInfo, error) {
271287 if err != nil {
272288 return TorrentInfo {}, err
273289 }
290+ defer response .Body .Close ()
274291
275292 body , err := io .ReadAll (response .Body )
276293 if err != nil {
@@ -316,6 +333,7 @@ func (c *client) GetFiles(id string) ([]FileInfo, error) {
316333 if err != nil {
317334 return []FileInfo {}, err
318335 }
336+ defer response .Body .Close ()
319337
320338 body , err := io .ReadAll (response .Body )
321339 if err != nil {
@@ -345,21 +363,23 @@ func (c *client) Delete(id string, deleteFiles bool) error {
345363 } else {
346364 v .Set ("deleteFiles" , "false" )
347365 }
348- response , err := c .post ("/api/v2/torrents/delete" , v )
366+ deleteResp , err := c .post ("/api/v2/torrents/delete" , v )
349367 if err != nil {
350368 return err
351369 }
352- if response .StatusCode != 200 {
370+ defer deleteResp .Body .Close ()
371+ if deleteResp .StatusCode != 200 {
353372 return errors .New ("failed to delete qbittorrent task" )
354373 }
355374
356375 v = url.Values {}
357376 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 )
359378 if err != nil {
360379 return err
361380 }
362- if response .StatusCode != 200 {
381+ defer deleteTagsResp .Body .Close ()
382+ if deleteTagsResp .StatusCode != 200 {
363383 return errors .New ("failed to delete qbittorrent tag" )
364384 }
365385 return nil
0 commit comments