mirror of https://github.com/rclone/rclone.git
fshttp: allow Transport to be customized #3631
This commit is contained in:
parent
543100070a
commit
0b6cdb7677
|
@ -127,9 +127,10 @@ func ResetTransport() {
|
|||
noTransport = new(sync.Once)
|
||||
}
|
||||
|
||||
// NewTransport returns an http.RoundTripper with the correct timeouts
|
||||
func NewTransport(ci *fs.ConfigInfo) http.RoundTripper {
|
||||
(*noTransport).Do(func() {
|
||||
// NewTransportCustom returns an http.RoundTripper with the correct timeouts.
|
||||
// The customize function is called if set to give the caller an opportunity to
|
||||
// customize any defaults in the Transport.
|
||||
func NewTransportCustom(ci *fs.ConfigInfo, customize func(*http.Transport)) http.RoundTripper {
|
||||
// Start with a sensible set of defaults then override.
|
||||
// This also means we get new stuff when it gets added to go
|
||||
t := new(http.Transport)
|
||||
|
@ -178,21 +179,33 @@ func NewTransport(ci *fs.ConfigInfo) http.RoundTripper {
|
|||
}
|
||||
t.IdleConnTimeout = 60 * time.Second
|
||||
t.ExpectContinueTimeout = ci.ConnectTimeout
|
||||
|
||||
// customize the transport if required
|
||||
if customize != nil {
|
||||
customize(t)
|
||||
}
|
||||
|
||||
// Wrap that http.Transport in our own transport
|
||||
transport = newTransport(ci, t)
|
||||
return newTransport(ci, t)
|
||||
}
|
||||
|
||||
// NewTransport returns an http.RoundTripper with the correct timeouts
|
||||
func NewTransport(ci *fs.ConfigInfo) http.RoundTripper {
|
||||
(*noTransport).Do(func() {
|
||||
transport = NewTransportCustom(ci, nil)
|
||||
})
|
||||
return transport
|
||||
}
|
||||
|
||||
// NewClient returns an http.Client with the correct timeouts
|
||||
func NewClient(ci *fs.ConfigInfo) *http.Client {
|
||||
transport := &http.Client{
|
||||
client := &http.Client{
|
||||
Transport: NewTransport(ci),
|
||||
}
|
||||
if ci.Cookie {
|
||||
transport.Jar = cookieJar
|
||||
client.Jar = cookieJar
|
||||
}
|
||||
return transport
|
||||
return client
|
||||
}
|
||||
|
||||
// Transport is a our http Transport which wraps an http.Transport
|
||||
|
|
Loading…
Reference in New Issue