Bagaimanakah Saya Boleh Meminta Pengesahan Asas Tanpa Mengubah Hala dalam Go Tanpa Menggunakan Pengendalian Ralat?
Apabila berinteraksi dengan REST API yang mengembalikan 302 ubah hala, mendapatkan pengepala Lokasi HTTP boleh menjadi sukar tanpa automatik pengalihan semula.
Penyelesaian:
Sebagai alternatif kepada pengendalian ralat, pertimbangkan untuk menggunakan fungsi CheckRedirect berikut untuk klien HTTP anda:
func noRedirect(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }
Ini pengubahsuaian mudah memberitahu pakej HTTP untuk tidak mengikuti ubah hala. Sebaliknya, ia mengembalikan respons yang diterima terakhir dengan isi yang tidak ditutup dan tiada ralat.
Untuk menggambarkan, berikut ialah versi dikemas kini bagi kod yang disediakan:
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)) }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Pengesahan Asas dalam Go Tanpa Mengendalikan Lencongan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!