Use custom http client in runtime, loosen timeouts (#2723)

* use custom http client in runtime, loosen timeouts

* Update pkg/runtime/runtime.go
---------
This commit is contained in:
Jo
2025-12-06 13:38:06 +01:00
committed by GitHub
parent aecd78040c
commit bcadb73755

View File

@@ -6,6 +6,7 @@ import (
"net/http" "net/http"
"os" "os"
"path/filepath" "path/filepath"
"time"
"github.com/leonelquinteros/gotext" "github.com/leonelquinteros/gotext"
@@ -42,18 +43,27 @@ func NewRuntime(cfg *settings.Configuration, cmdArgs *parser.Arguments, version
runner := exe.NewOSRunner(logger.Child("runner")) runner := exe.NewOSRunner(logger.Child("runner"))
transport := http.DefaultTransport.(*http.Transport).Clone() transport := http.DefaultTransport.(*http.Transport).Clone()
if socks5_proxy := os.Getenv("SOCKS5_PROXY"); socks5_proxy != "" { transport.IdleConnTimeout = 90 * time.Second
dialer, err := proxy.SOCKS5("tcp", socks5_proxy, nil, proxy.Direct) transport.TLSHandshakeTimeout = 30 * time.Second
transport.ResponseHeaderTimeout = 30 * time.Second
transport.MaxIdleConns = 100
transport.MaxIdleConnsPerHost = 10
if socks5Proxy := os.Getenv("SOCKS5_PROXY"); socks5Proxy != "" {
dialer, err := proxy.SOCKS5("tcp", socks5Proxy, nil, proxy.Direct)
if err != nil { if err != nil {
return nil, err return nil, err
} }
transport = &http.Transport{Dial: dialer.Dial}
contextDialer, ok := dialer.(proxy.ContextDialer)
if !ok {
return nil, fmt.Errorf("SOCKS5 dialer does not support DialContext")
}
transport.DialContext = contextDialer.DialContext
} }
httpClient := &http.Client{ httpClient := &http.Client{
CheckRedirect: func(req *http.Request, via []*http.Request) error { Timeout: 30 * time.Second,
return http.ErrUseLastResponse
},
Transport: transport, Transport: transport,
} }
@@ -128,7 +138,7 @@ func NewRuntime(cfg *settings.Configuration, cmdArgs *parser.Arguments, version
PacmanConf: pacmanConf, PacmanConf: pacmanConf,
VCSStore: vcsStore, VCSStore: vcsStore,
CmdBuilder: cmdBuilder, CmdBuilder: cmdBuilder,
HTTPClient: &http.Client{}, HTTPClient: httpClient,
VoteClient: voteClient, VoteClient: voteClient,
AURClient: aurCache, AURClient: aurCache,
Logger: logger, Logger: logger,