Pengendalian Pengesahan HTTP Asas dalam Go
Apabila melaksanakan pengesahan HTTP asas dalam Go, beberapa cabaran yang tidak dijangka mungkin timbul. Artikel ini membincangkan isu biasa yang dihadapi semasa cuba melaksanakan pengesahan HTTP asas.
Isu: Ralat menyatakan "skim protokol tidak disokong" ditemui semasa melaksanakan kod berikut:
func basicAuth() string { var username string = "foo" var passwd string = "bar" client := &http.Client{} req, err := http.NewRequest("GET", "mydomain.example", nil) req.SetBasicAuth(username, passwd) resp, err := client.Do(req) if err != nil{ log.Fatal(err) } bodyText, err := ioutil.ReadAll(resp.Body) s := string(bodyText) return s }
Punca: Apabila ubah hala berlaku, Go-lang membuang mana-mana pengepala yang ditentukan, termasuk pengepala Kebenaran yang ditetapkan untuk pengesahan asas.
Penyelesaian: Untuk membetulkan isu ini, fungsi dasar ubah hala tersuai boleh dilaksanakan:
func redirectPolicyFunc(req *http.Request, via []*http.Request) error { req.Header.Add("Authorization", "Basic "+basicAuth("username1", "password123")) return nil }
Ini fungsi memastikan bahawa pengepala Kebenaran ditambahkan semula semasa ubah hala, dengan berkesan mengekalkan pengesahan kelayakan.
Pelaksanaan:
func main() { client := &http.Client{ Jar: cookieJar, CheckRedirect: redirectPolicyFunc, } req, err := http.NewRequest("GET", "http://localhost/", nil) req.Header.Add("Authorization", "Basic "+basicAuth("username1", "password123")) resp, err := client.Do(req) }
Dengan menggunakan fungsi dasar ubah hala, pengepala yang ditentukan, termasuk pengepala Kebenaran untuk pengesahan asas, akan berterusan sepanjang ubah hala, memastikan pengesahan berjaya dengan pelayan sasaran.
Atas ialah kandungan terperinci Mengapa Pengesahan HTTP Asas Gagal Masuk Apabila Ubah Hala Berlaku?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!