Anfrage- und Antwort-Middleware
Resty bietet die Möglichkeit, Middleware zu verwenden, um Anfragen vor und Antworten nach deren Versand abzufangen, um benutzerdefinierte Verarbeitungsvorgänge für Anfragen und Antworten zu ermöglichen. Dieser Ansatz ist flexibler als Callback-Funktionen.
// Erstellen eines Resty-Clients
client := resty.New()
// Registrierung der Anfrage-Middleware
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
// Jetzt können Sie auf den Client und das aktuelle Anfrageobjekt zugreifen
// Führen Sie die erforderlichen Operationen durch
return nil // Geben Sie nil zurück, wenn erfolgreich, andernfalls geben Sie einen Fehler zurück
})
// Registrierung der Antwort-Middleware
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
// Jetzt können Sie auf den Client und das aktuelle Antwortobjekt zugreifen
// Führen Sie die erforderlichen Operationen durch
return nil // Geben Sie nil zurück, wenn erfolgreich, andernfalls geben Sie einen Fehler zurück
})
Fehlerhaken
Resty bietet einen OnError-Haken, der in den folgenden Fällen aufgerufen werden kann:
- Der Client kann aufgrund von Verbindungszeitüberschreitung, TLS-Handshake-Fehler usw. keine Anfrage senden.
- Die Anfrage wurde die maximale Anzahl von Wiederholungen durchlaufen, aber es ist dennoch fehlgeschlagen.
Wenn der Server antwortet, wird der ursprüngliche Fehler in *resty.ResponseError
verpackt, der die zuletzt empfangene Antwort enthält.
// Erstellen eines Resty-Clients
client := resty.New()
client.OnError(func(req *resty.Request, err error) {
if v, ok := err.(*resty.ResponseError); ok {
// v.Response enthält die letzte Antwort des Servers
// v.Err enthält den ursprünglichen Fehler
}
// Fehler protokollieren, Metriken erhöhen, usw.
})
Weiterleitungsrichtlinien
Resty bietet mehrere verfügbare Weiterleitungsrichtlinien und unterstützt die gleichzeitige Verwendung mehrerer Richtlinien.
// Erstellen eines Resty-Clients
client := resty.New()
// Setzen Sie die Weiterleitungsrichtlinie für den Client. Erstellen Sie bei Bedarf eine Richtlinie
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))
// Verwenden Sie mehrere Richtlinien, z.B. Weiterleitungsanzahl, Domainprüfung, usw.
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))
Benutzerdefinierte Weiterleitungsrichtlinie
Implementieren Sie das RedirectPolicy-Interface und registrieren Sie es beim Resty-Client. Bitte beachten Sie die Datei redirect.go für weitere Informationen.
// Erstellen eines Resty-Clients
client := resty.New()
// Verwenden Sie die ursprüngliche Funktion mit resty.SetRedirectPolicy
client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
// Implementieren Sie hier Ihre Logik
// Geben Sie nil zurück, um mit der Weiterleitung fortzufahren, oder geben Sie einen Fehler zurück, um die Weiterleitung zu stoppen/verhindern
return nil
}))
//---------------------------------------------------
// Erstellen einer flexibleren Weiterleitungsrichtlinie mithilfe einer Struktur
type CustomRedirectPolicy struct {
// Definieren Sie hier Variablen
}
func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
// Implementieren Sie hier Ihre Logik
// Geben Sie nil zurück, um mit der Weiterleitung fortzufahren, oder geben Sie einen Fehler zurück, um die Weiterleitung zu stoppen/verhindern
return nil
}
// Registrieren in Resty
client.SetRedirectPolicy(CustomRedirectPolicy{/* Variablen initialisieren */})
Proxy-Einstellungen
Standardmäßig unterstützt Go
Proxys über die Umgebungsvariable HTTP_PROXY
. Resty bietet Proxy-Unterstützung durch SetProxy
und RemoveProxy
. Wählen Sie entsprechend Ihren Anforderungen.
Proxy-Einstellungen auf Client-Ebene werden auf alle Anfragen angewendet.
// Erstellen eines Resty-Clients
client := resty.New()
// Setzen Sie die Proxy-URL und den Port
client.SetProxy("http://proxyserver:8888")
// Um die Proxy-Einstellungen zu entfernen
client.RemoveProxy()