Middleware di richiesta e risposta
Resty fornisce la possibilità di utilizzare middleware per intercettare le richieste prima e le risposte dopo, consentendo l'elaborazione personalizzata delle operazioni di richiesta e risposta. Questo approccio è più flessibile rispetto alle funzioni di callback.
// Crea un client Resty
client := resty.New()
// Registra il middleware di richiesta
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
// Ora puoi accedere al client e all'oggetto richiesta corrente
// Eseguire le operazioni come necessario
return nil // Restituisci nil se tutto è andato a buon fine, altrimenti restituisci un errore
})
// Registra il middleware di risposta
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
// Ora puoi accedere al client e all'oggetto risposta corrente
// Eseguire le operazioni come necessario
return nil // Restituisci nil se tutto è andato a buon fine, altrimenti restituisci un errore
})
Errori Hooks
Resty fornisce un hook OnError, che può essere chiamato nei seguenti casi:
- Il client non è in grado di inviare una richiesta a causa di timeout della connessione, fallimento della handshake TLS, ecc.
- La richiesta è stata ripetuta il numero massimo di volte ma fallisce ancora.
Se il server risponde, l'errore originale sarà incapsulato in *resty.ResponseError
, che contiene l'ultima risposta ricevuta.
// Crea un client Resty
client := resty.New()
client.OnError(func(req *resty.Request, err error) {
if v, ok := err.(*resty.ResponseError); ok {
// v.Response contiene l'ultima risposta del server
// v.Err contiene l'errore originale
}
// Registra gli errori, aumenta le metriche, ecc.
})
Politiche di reindirizzamento
Resty fornisce diverse politiche di reindirizzamento disponibili e supporta l'uso simultaneo di molteplici politiche.
// Crea un client Resty
client := resty.New()
// Imposta la politica di reindirizzamento per il client. Crea una politica come necessario
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))
// Utilizza più politiche, come conteggio dei reindirizzamenti, verifica del dominio, ecc.
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))
Politica di reindirizzamento personalizzata
Implementa l'interfaccia RedirectPolicy e registrala con il client Resty. Fare riferimento a redirect.go per ulteriori informazioni.
// Crea un client Resty
client := resty.New()
// Utilizza la funzione originale con resty.SetRedirectPolicy
client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
// Implementa la logica qui
// Restituisci nil per continuare il reindirizzamento, o restituisci un errore per interrompere/prevenire il reindirizzamento
return nil
}))
//---------------------------------------------------
// Crea una politica di reindirizzamento più flessibile utilizzando una struttura
type CustomRedirectPolicy struct {
// Definisci le variabili qui
}
func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
// Implementa la logica qui
// Restituisci nil per continuare il reindirizzamento, o restituisci un errore per interrompere/prevenire il reindirizzamento
return nil
}
// Registra in Resty
client.SetRedirectPolicy(CustomRedirectPolicy{/* Inizializza le variabili */})
Impostazioni del proxy
Per impostazione predefinita, Go
supporta i proxy attraverso la variabile di ambiente HTTP_PROXY
. Resty fornisce il supporto proxy tramite SetProxy
e RemoveProxy
. Scegli in base alle tue esigenze.
Le impostazioni del proxy a livello client verranno applicate a tutte le richieste.
// Crea un client Resty
client := resty.New()
// Imposta l'URL e la porta del proxy
client.SetProxy("http://proxyserver:8888")
// Per rimuovere le impostazioni del proxy
client.RemoveProxy()