Files
photoprism/internal/service/hub/places/request.go
2025-07-03 12:58:20 +02:00

72 lines
1.5 KiB
Go

package places
import (
"crypto/sha1"
"fmt"
"net/http"
"time"
"github.com/photoprism/photoprism/pkg/media/http/header"
)
// GetRequest fetches the cell ID data from the service URL.
func GetRequest(reqUrl string, locale string) (r *http.Response, err error) {
var req *http.Request
// Log request URL.
log.Tracef("places: sending request to %s", reqUrl)
// Create GET request instance.
req, err = http.NewRequest(http.MethodGet, reqUrl, nil)
// Ok?
if err != nil {
log.Errorf("places: %s", err.Error())
return r, err
}
// Set user agent.
if UserAgent != "" {
req.Header.Set(header.UserAgent, UserAgent)
} else {
req.Header.Set(header.UserAgent, "PhotoPrism/Test")
}
// Set requested result locale.
if locale != "" {
req.Header.Set(header.AcceptLanguage, locale)
}
// Add API key?
if Key != "" {
req.Header.Set("X-Key", Key)
req.Header.Set("X-Signature", fmt.Sprintf("%x", sha1.Sum([]byte(Key+reqUrl+Secret))))
}
// Create new http.Client.
//
// NOTE: Timeout specifies a time limit for requests made by
// this Client. The timeout includes connection time, any
// redirects, and reading the response body. The timer remains
// running after GetRequest, Head, Post, or Do return and will
// interrupt reading of the Response.Body.
client := &http.Client{Timeout: 60 * time.Second}
// Perform request.
for i := 0; i < Retries; i++ {
r, err = client.Do(req)
// Ok?
if err == nil {
return r, nil
}
// Wait before trying again?
if RetryDelay.Nanoseconds() > 0 {
time.Sleep(RetryDelay)
}
}
return r, err
}