web-dev-qa-db-fra.com

Comment puis-je lire un en-tête d'une requête http dans golang?

Si je reçois une demande de type http.Request, comment puis-je lire la valeur d'un en-tête spécifique? Dans ce cas, je veux extraire la valeur d'un jeton JWT de l'en-tête de la demande.

24
Ayman Elmubark

Vous pouvez utiliser le r.Header.Get :

func yourHandler(w http.ResponseWriter, r *http.Request) {
    ua := r.Header.Get("User-Agent")
    ...
}
48
nbari
package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe("localhost:8000", nil))
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "%s %s %s \n", r.Method, r.URL, r.Proto)
    //Iterate over all header fields
    for k, v := range r.Header {
        fmt.Fprintf(w, "Header field %q, Value %q\n", k, v)
    }

    fmt.Fprintf(w, "Host = %q\n", r.Host)
    fmt.Fprintf(w, "RemoteAddr= %q\n", r.RemoteAddr)
    //Get value for a specified token
    fmt.Fprintf(w, "\n\nFinding value of \"Accept\" %q", r.Header["Accept"])
}

La connexion à http: // localhost: 8000 / à partir d’un navigateur imprimera la sortie dans le navigateur.

11
Ravi