如果我收到类型请求,http.Request我该如何读取特定标题的值?在这种情况下,我想从请求标头中提取jwt标记的值.
nba*_*ari 52
你可以使用r.Header.Get:
func yourHandler(w http.ResponseWriter, r *http.Request) {
ua := r.Header.Get("User-Agent")
...
}
Run Code Online (Sandbox Code Playgroud)
Faa*_*lak 12
注意:接受的答案缺少一些信息。
Header 表示 HTTP 标头中的键值对。它被定义为一个映射,其中键是字符串类型,值是字符串类型的数组。
type Header map[string][]string
Run Code Online (Sandbox Code Playgroud)
实际上,r.Header.Get获取与给定键关联的第一个值,即它只获取索引 0 中的第一个字符串。
如果您的标头只有一个值,这是可以的,但如果它有多个值,您可能会错过一些信息。
例如。User-Agent 标头针对同一键有多个值。
user-agent: ["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6)", "AppleWebKit/537.36 (KHTML, like Gecko)", "Chrome/80.0.3987.106 Safari/537.36",]
Run Code Online (Sandbox Code Playgroud)
因此,如果您使用r.Header.get("User-Agent"),它将Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) 仅返回而不返回其余值。
如果你想获得所有的值,你可以使用这个:
req.Header["User-Agent"]
Run Code Online (Sandbox Code Playgroud)
Rav*_*avi 11
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"])
}
Run Code Online (Sandbox Code Playgroud)
从浏览器连接到http:// localhost:8000 /将在浏览器中打印输出.