From 4926480a7e8fafe5c8ffcf1198062023c99f162e Mon Sep 17 00:00:00 2001 From: rramiachraf <51409801+rramiachraf@users.noreply.github.com> Date: Sun, 12 Mar 2023 13:29:33 +0100 Subject: [PATCH] feat: use custom http client instead of default one --- lyrics.go | 4 ++-- main.go | 9 +++++++-- proxy.go | 2 +- search.go | 2 +- utils.go | 21 +++++++++++++++++++++ 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/lyrics.go b/lyrics.go index 2fcb6d7..dcda46e 100644 --- a/lyrics.go +++ b/lyrics.go @@ -56,7 +56,7 @@ func (s *song) parseSongData(doc *goquery.Document) { songID := strings.Replace(attr, "genius://songs/", "", 1) u := fmt.Sprintf("https://genius.com/api/songs/%s?text_format=plain", songID) - res, err := http.Get(u) + res, err := sendRequest(u) if err != nil { logger.Errorln(err) } @@ -112,7 +112,7 @@ func lyricsHandler(w http.ResponseWriter, r *http.Request) { } url := fmt.Sprintf("https://genius.com/%s-lyrics", id) - resp, err := http.Get(url) + resp, err := sendRequest(url) if err != nil { logger.Errorln(err) w.WriteHeader(http.StatusInternalServerError) diff --git a/main.go b/main.go index f23f593..e7b340c 100644 --- a/main.go +++ b/main.go @@ -14,8 +14,13 @@ import ( ) var logger = logrus.New() +var client = &http.Client{} func main() { + client = &http.Client{ + Timeout: 20 * time.Second, + } + c, err := bigcache.NewBigCache(bigcache.DefaultConfig(time.Hour * 24)) if err != nil { logger.Fatalln("can't initialize caching") @@ -42,8 +47,8 @@ func main() { server := &http.Server{ Handler: r, - WriteTimeout: 10 * time.Second, - ReadTimeout: 10 * time.Second, + WriteTimeout: 25 * time.Second, + ReadTimeout: 25 * time.Second, } port, _ := strconv.Atoi(os.Getenv("PORT")) diff --git a/proxy.go b/proxy.go index dc9afcd..006c932 100644 --- a/proxy.go +++ b/proxy.go @@ -47,7 +47,7 @@ func proxyHandler(w http.ResponseWriter, r *http.Request) { // first segment of URL resize the image to reduce bandwith usage. url := fmt.Sprintf("https://t2.genius.com/unsafe/300x300/https://images.genius.com/%s.%s", f, ext) - res, err := http.Get(url) + res, err := sendRequest(url) if err != nil { logger.Errorln(err) w.WriteHeader(http.StatusInternalServerError) diff --git a/search.go b/search.go index 73e71f5..a1b0ec1 100644 --- a/search.go +++ b/search.go @@ -37,7 +37,7 @@ func searchHandler(w http.ResponseWriter, r *http.Request) { query := r.URL.Query().Get("q") url := fmt.Sprintf(`https://genius.com/api/search/multi?q=%s`, query) - res, err := http.Get(url) + res, err := sendRequest(url) if err != nil { logger.Errorln(err) w.WriteHeader(http.StatusInternalServerError) diff --git a/utils.go b/utils.go index 7df3d38..5a05c8f 100644 --- a/utils.go +++ b/utils.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "net/http" + "net/url" "path" "text/template" @@ -76,3 +77,23 @@ func render(n string, w http.ResponseWriter, data interface{}) { return } } + +const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36" + +func sendRequest(u string) (*http.Response, error) { + url, err := url.Parse(u) + if err != nil { + return nil, err + } + + req := &http.Request{ + Method: http.MethodGet, + URL: url, + Header: map[string][]string{ + "Accept-Language": {"en-US"}, + "User-Agent": {UA}, + }, + } + + return client.Do(req) +}