Maison > développement back-end > Golang > Comment gérer les cookies d'authentification pour les requêtes HTTP dans Go ?

Comment gérer les cookies d'authentification pour les requêtes HTTP dans Go ?

DDD
Libérer: 2024-11-08 22:56:02
original
554 Les gens l'ont consulté

How to Handle Authentication Cookies for HTTP Requests in Go?

Amélioration de la gestion de l'authentification pour les requêtes HTTP dans Go

Problème :

Considérez le code suivant pour effectuer des requêtes HTTP avec authentification :

client := &http.Client{}

// Authenticate
req, err := http.NewRequest("GET", "http://164.99.113.32/Authenticate", nil)
req.SetBasicAuth("<username>", "<password>")
resp, err := client.Do(req)
if err != nil {
    fmt.Printf("Error : %s", err)
}

// Get Details
req.URL, _ = url.Parse("http://164.99.113.32/Details")
resp, err = client.Do(req)
if err != nil {
    fmt.Printf("Error : %s", err)
}
Copier après la connexion

Après l'authentification réussie, la requête suivante vers « / Détails » échoue avec une erreur d'accès refusé 401, bien qu'il n'y ait aucun problème côté serveur.

Solution :

Pour résoudre ce problème, il est nécessaire d'utiliser un pot à cookies pour gérer les informations de session. Le client HTTP de Go ne gère pas cela par défaut, nous devons donc définir notre implémentation de pot à cookies personnalisé :

type myjar struct {
    jar map[string] []*http.Cookie
}

func (p* myjar) SetCookies(u *url.URL, cookies []*http.Cookie) {
    fmt.Printf("The URL is : %s\n", u.String())
    fmt.Printf("The cookie being set is : %s\n", cookies)
    p.jar [u.Host] = cookies
}

func (p *myjar) Cookies(u *url.URL) []*http.Cookie {
    fmt.Printf("The URL is : %s\n", u.String())
    fmt.Printf("Cookie being returned is : %s\n", p.jar[u.Host])
    return p.jar[u.Host]
}
Copier après la connexion

Dans la fonction principale, initialisez le pot à cookies personnalisé et attribuez-le au client HTTP :

    jar := &myjar{}
    jar.jar = make(map[string] []*http.Cookie)
    client.Jar = jar
Copier après la connexion

Avec cette implémentation, la requête suivante peut accéder avec succès au point de terminaison '/Details'.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal