Fix response decompression
This commit is contained in:
@@ -6,13 +6,14 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
"io"
|
"io"
|
||||||
"math"
|
"math"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"sort"
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetScoreByPlayerID GET /score/:player_id
|
// GetScoreByPlayerID GET /score/:player_id
|
||||||
@@ -99,7 +100,7 @@ func getPlayerData(playerName string) (*models.TrackerDataJSON, int) {
|
|||||||
return nil, 0
|
return nil, 0
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36")
|
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36")
|
||||||
req.Header.Set("Accept-Encoding", "gzip, deflate, br")
|
req.Header.Set("Accept-Encoding", "gzip, deflate, br")
|
||||||
|
|
||||||
res, err := c.Do(req)
|
res, err := c.Do(req)
|
||||||
@@ -128,8 +129,16 @@ func getPlayerData(playerName string) (*models.TrackerDataJSON, int) {
|
|||||||
return nil, res.StatusCode
|
return nil, res.StatusCode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
encoding := res.Header.Get("Content-Encoding")
|
||||||
|
reader, err := utils.DecompressResponseBody(encoding, res.Body)
|
||||||
|
if err != nil {
|
||||||
|
utils.Logger.Errorf("[SCORE] Failed to decompress response body: %s", err.Error())
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
defer reader.Close()
|
||||||
|
|
||||||
var response models.TrackerDataJSON
|
var response models.TrackerDataJSON
|
||||||
body, err := io.ReadAll(res.Body)
|
body, err := io.ReadAll(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Logger.Errorf("[SCORE] Failed to read response body: %s", err.Error())
|
utils.Logger.Errorf("[SCORE] Failed to read response body: %s", err.Error())
|
||||||
return nil, 0
|
return nil, 0
|
||||||
|
|||||||
@@ -3,6 +3,11 @@ package utils
|
|||||||
import (
|
import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"github.com/andybalholm/brotli"
|
||||||
|
"github.com/klauspost/compress/flate"
|
||||||
|
"github.com/klauspost/compress/gzip"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GenerateActivationCode() string {
|
func GenerateActivationCode() string {
|
||||||
@@ -12,3 +17,16 @@ func GenerateActivationCode() string {
|
|||||||
}
|
}
|
||||||
return hex.EncodeToString(bytes)
|
return hex.EncodeToString(bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DecompressResponseBody(encoding string, body io.Reader) (io.ReadCloser, error) {
|
||||||
|
switch encoding {
|
||||||
|
case "gzip":
|
||||||
|
return gzip.NewReader(body)
|
||||||
|
case "deflate":
|
||||||
|
return flate.NewReader(body), nil
|
||||||
|
case "br":
|
||||||
|
return io.NopCloser(brotli.NewReader(body)), nil
|
||||||
|
default:
|
||||||
|
return io.NopCloser(body), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user