mirror of
https://github.com/photoprism/photoprism.git
synced 2025-12-12 00:34:13 +01:00
72 lines
1.5 KiB
Go
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
|
|
}
|