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

时间:2017-11-29 16:21:33

标签: go

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

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

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

3 个答案:

答案 0 :(得分:2)

the documentation可以看出,Header只是一个map[string][]string,其中包含一些额外的辅助方法,因此您仍然可以像使用任何map一样使用它来访问其密钥:

for key,val := range req.Header {
    // Logic using key
    // And val if you need it
}

答案 1 :(得分:1)

使用Request.Header访问所有标头。因为Header是map [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)
    }
}

答案 2 :(得分:0)

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

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