Wie kann ich eine Standardauthentifizierung ohne Umleitung in Go anfordern, ohne Fehlerbehandlung zu verwenden?
Bei der Interaktion mit einer REST-API, die 302 Weiterleitungen zurückgibt, Ohne automatische Übertragung kann es schwierig sein, den HTTP-Location-Header zu erhalten Umleitung.
Lösung:
Erwägen Sie als Alternative zur Fehlerbehandlung die Verwendung der folgenden CheckRedirect-Funktion für Ihren HTTP-Client:
func noRedirect(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }
Dies Durch eine einfache Änderung wird das HTTP-Paket angewiesen, Weiterleitungen nicht zu folgen. Stattdessen wird die zuletzt empfangene Antwort mit einem nicht geschlossenen Textkörper und ohne Fehler zurückgegeben.
Zur Veranschaulichung hier eine aktualisierte Version des bereitgestellten Codes:
package main import ( "fmt" "io/ioutil" "net/http" ) var BASE_URL = "https://api.example.com/v1" var STORMPATH_API_KEY_ID = "xxx" var STORMPATH_API_KEY_SECRET = "xxx" func main() { client := &http.Client{ CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, } req, err := http.NewRequest("GET", BASE_URL+"/tenants/current", nil) req.SetBasicAuth(STORMPATH_API_KEY_ID, STORMPATH_API_KEY_SECRET) resp, err := client.Do(req) // If we get here, it means one of two things: either this http request // actually failed, or we got an http redirect response, and should process it. if err != nil { if resp.StatusCode == 302 { fmt.Println("got redirect") } else { panic("HTTP request failed.") } } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }
Das obige ist der detaillierte Inhalt vonWie kann ich in Go eine Standardauthentifizierung durchführen, ohne Weiterleitungen zu verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!