如何在Go中获取所有请求标头

rhe*_*0b1 0 go

如何在Go中从请求获取所有可用的HTTP标头作为数组?我只看到以下两种方法:

  • 标头(名称字符串,值字符串)
  • GetHeader(名称字符串)

但是在这种情况下,我需要知道标题的名称,并且不能返回所有现有的标题。我想将http标头从一个请求复制到另一个请求。

Adr*_*ian 6

正如您从文档中看到的,Header只是 amap[string][]string带有一些额外的辅助方法,因此您仍然可以像任何一样使用它map来访问其密钥:

for key,val := range req.Header {
    // Logic using key
    // And val if you need it
}
Run Code Online (Sandbox Code Playgroud)


小智 6

如果您想一一循环所有标题,则可以使用上述方法。如果你想在一行中打印所有标题,你可以,

if reqHeadersBytes, err := json.Marshal(req.Header); err != nil {
    log.Println("Could not Marshal Req Headers")
} else {
    log.Println(string(reqHeadersBytes))
}
Run Code Online (Sandbox Code Playgroud)


Cer*_*món 5

使用Request.Header访问所有标头。由于标头是map [string] [] string,因此需要两个循环才能访问所有标头。

// Loop over header names
for name, values := range r.Header {
    // Loop over all values for the name.
    for _, value := range values {
        fmt.Println(name, value)
    }
}
Run Code Online (Sandbox Code Playgroud)