84 lines
2.5 KiB
Go
84 lines
2.5 KiB
Go
// Copyright 2020 beego
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package httplib
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"net/http"
|
|
"net/http/cookiejar"
|
|
"net/url"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
// BeegoHTTPSettings is the http.Client setting
|
|
type BeegoHTTPSettings struct {
|
|
UserAgent string
|
|
ConnectTimeout time.Duration
|
|
ReadWriteTimeout time.Duration
|
|
TLSClientConfig *tls.Config
|
|
Proxy func(*http.Request) (*url.URL, error)
|
|
Transport http.RoundTripper
|
|
CheckRedirect func(req *http.Request, via []*http.Request) error
|
|
EnableCookie bool
|
|
Gzip bool
|
|
Retries int // if set to -1 means will retry forever
|
|
RetryDelay time.Duration
|
|
FilterChains []FilterChain
|
|
}
|
|
|
|
// createDefaultCookie creates a global cookiejar to store cookies.
|
|
func createDefaultCookie() {
|
|
settingMutex.Lock()
|
|
defer settingMutex.Unlock()
|
|
defaultCookieJar, _ = cookiejar.New(nil)
|
|
}
|
|
|
|
// SetDefaultSetting overwrites default settings
|
|
// Keep in mind that when you invoke the SetDefaultSetting
|
|
// some methods invoked before SetDefaultSetting
|
|
func SetDefaultSetting(setting BeegoHTTPSettings) {
|
|
settingMutex.Lock()
|
|
defer settingMutex.Unlock()
|
|
defaultSetting = setting
|
|
}
|
|
|
|
// GetDefaultSetting return current default setting
|
|
func GetDefaultSetting() BeegoHTTPSettings {
|
|
return defaultSetting
|
|
}
|
|
|
|
var defaultSetting = BeegoHTTPSettings{
|
|
UserAgent: "beegoServer",
|
|
ConnectTimeout: 60 * time.Second,
|
|
ReadWriteTimeout: 60 * time.Second,
|
|
Gzip: true,
|
|
FilterChains: make([]FilterChain, 0, 4),
|
|
}
|
|
|
|
var defaultCookieJar http.CookieJar
|
|
var settingMutex sync.Mutex
|
|
|
|
// AddDefaultFilter add a new filter into defaultSetting
|
|
// Be careful about using this method if you invoke SetDefaultSetting somewhere
|
|
func AddDefaultFilter(fc FilterChain) {
|
|
settingMutex.Lock()
|
|
defer settingMutex.Unlock()
|
|
if defaultSetting.FilterChains == nil {
|
|
defaultSetting.FilterChains = make([]FilterChain, 0, 4)
|
|
}
|
|
defaultSetting.FilterChains = append(defaultSetting.FilterChains, fc)
|
|
}
|