Gestion de base de l'authentification HTTP dans Go
Lors de la mise en œuvre de l'authentification HTTP de base dans Go, des défis inattendus peuvent survenir. Cet article se penche sur un problème courant rencontré lors de la tentative d'implémentation de l'authentification HTTP de base.
Problème : Une erreur indiquant « schéma de protocole non pris en charge » est rencontrée lors de l'exécution du code suivant :
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 }
Cause : Lorsque des redirections se produisent, Go-lang supprime tous les en-têtes spécifiés, y compris l'en-tête d'autorisation défini pour l'authentification de base.
Solution : Pour rectifier Ce problème, une fonction de politique de redirection personnalisée peut être implémentée :
func redirectPolicyFunc(req *http.Request, via []*http.Request) error { req.Header.Add("Authorization", "Basic "+basicAuth("username1", "password123")) return nil }
Cette fonction garantit que l'en-tête Authorization est rajouté lors des redirections, préservant ainsi efficacement les informations d'authentification.
Mise en œuvre :
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) }
En utilisant la fonction de stratégie de redirection, les en-têtes spécifiés, y compris l'en-tête Authorization pour l'authentification de base, persisteront tout au long des redirections, garantissant une authentification réussie avec le serveur cible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!