Maison > développement back-end > Golang > le corps du texte

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

DDD
Libérer: 2024-11-08 22:56:02
original
475 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!

source:php.cn
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