Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,9 @@ func init() {
log.Printf("[debug] TibiaData API User-Agent: %s", TibiaDataUserAgent)
}

// Initialize shared HTTP client (must be after TibiaDataUserAgent is set)
initTibiaDataClient()

// Initiate the validator
err := validation.Initiate(TibiaDataUserAgent)
if err != nil {
Expand Down
60 changes: 33 additions & 27 deletions src/webserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,41 @@ var (
// TibiaData app resty vars
TibiaDataUserAgent, TibiaDataProxyDomain string

// tibiaDataClient is a shared resty client reused across all requests
tibiaDataClient *resty.Client

// ErrorNotFound will be returned if the requests ends up in a 404
ErrorNotFound = errors.New("page not found")
)

// initTibiaDataClient creates the shared resty client with static configuration.
// Must be called after TibiaDataUserAgent is set.
func initTibiaDataClient() {
tibiaDataClient = resty.New()

// Set Debug if enabled by TibiaDataDebug var
if TibiaDataDebug {
tibiaDataClient.SetDebug(true)
tibiaDataClient.EnableTrace()
}

// Set client timeout and retry
tibiaDataClient.SetTimeout(5 * time.Second)
tibiaDataClient.SetRetryCount(2)

// Set headers for all requests
tibiaDataClient.SetHeaders(map[string]string{
"Content-Type": "application/json",
"User-Agent": TibiaDataUserAgent,
})

// Enabling Content length value for all request
tibiaDataClient.SetContentLength(true)

// Disable redirection of client (so we skip parsing maintenance page)
tibiaDataClient.SetRedirectPolicy(resty.NoRedirectPolicy())
}

// DebugOutInformation wraps OutInformation with some debug info
type DebugOutInformation struct {
Information Information `json:"information"`
Expand Down Expand Up @@ -1197,31 +1228,6 @@ func TibiaDataUserAgentGenerator(version int) string {

// TibiaDataHTMLDataCollector func
func TibiaDataHTMLDataCollector(TibiaDataRequest TibiaDataRequestStruct) (string, error) {
// Setting up resty client
client := resty.New()

// Set Debug if enabled by TibiaDataDebug var
if TibiaDataDebug {
client.SetDebug(true)
client.EnableTrace()
}

// Set client timeout and retry
client.SetTimeout(5 * time.Second)
client.SetRetryCount(2)

// Set headers for all requests
client.SetHeaders(map[string]string{
"Content-Type": "application/json",
"User-Agent": TibiaDataUserAgent,
})

// Enabling Content length value for all request
client.SetContentLength(true)

// Disable redirection of client (so we skip parsing maintenance page)
client.SetRedirectPolicy(resty.NoRedirectPolicy())

// Replace domain with proxy if env TIBIADATA_PROXY set
if TibiaDataProxyDomain != "" {
TibiaDataRequest.URL = strings.ReplaceAll(TibiaDataRequest.URL, "https://www.tibia.com/", TibiaDataProxyDomain)
Expand All @@ -1236,11 +1242,11 @@ func TibiaDataHTMLDataCollector(TibiaDataRequest TibiaDataRequestStruct) (string

switch TibiaDataRequest.Method {
case resty.MethodPost:
res, err = client.R().
res, err = tibiaDataClient.R().
SetFormData(TibiaDataRequest.FormData).
Post(TibiaDataRequest.URL)
default:
res, err = client.R().Get(TibiaDataRequest.URL)
res, err = tibiaDataClient.R().Get(TibiaDataRequest.URL)
}

if TibiaDataDebug {
Expand Down
Loading