我发送POST请求:
req, err := http.NewRequest("POST", link, bytes.NewBuffer(jsonStr))
client := &http.Client{Timeout: tm}
resp, err := client.Do(req)
我收到resp.Header
http.Header
我需要这样的事情:
[
"Server: nginx/1.4.4",
"Date: Wed, 24 Feb 2016 19:09:49 GMT"
]
我不知道如何解决这个问题,因为我不知道如何处理http.Header
数据类型。有人可以帮忙吗
答案 0 :(得分:6)
resp.Header
的类型为http.Header
。您可以在文档中看到此类型也是map
,因此您可以通过两种不同的方式访问它:
1)使用http.Header
的方法:
serverValue := resp.Header().Get("Server")
dataValue := resp.Header().Get("Date")
如果标题存在,您将获得其第一个值(请记住,单个标题名称可能有多个值);否则你会得到一个空字符串。
2)使用map
的方法:
serverValue, ok := resp.Header()["Server"]
dataValue, ok := resp.Header()["Date"]
如果标头存在,ok
将为true
(即标题存在),您将获得一个包含该标头所有值的字符串片段;否则,ok
将为false
(即标题不存在)。
使用您喜欢的任何方法。
如果需要迭代所有标头值,可以使用以下内容进行迭代:
for name, value := range resp.Header() {
fmt.Printf("%v: %v\n", name, value)
}
答案 1 :(得分:4)
你可以使用像这样的函数:
func HeaderToArray(header http.Header) (res []string) {
for name, values := range header {
for _, value := range values {
res = append(res, fmt.Sprintf("%s: %s", name, value))
}
}
return
}
它应该返回一个你想要的数组。
答案 2 :(得分:0)
您可以使用resp.Header().Get()
检索响应标头的第一个值,如果标头键没有值,则返回""
。
因此,在你的情况下
var a [2]string
a[0] = resp.Header().Get("server")
a[1] = resp.Header().Get("date")
答案 3 :(得分:0)
go version go1.13 windows/amd64
。来自http.Request
的请求对象包含Header
对象。我们在这里使用net/http
包。您可以使用以下方法按名称获取所有标头的值:
import(
"net/http"
)
type RequestHeaders struct {
ContentType string `json: "content-type"`
Authorization string `json: "authorization"`
}
func getHeaders(r *http.Request) RequestHeaders {
contentType := r.Header.Get("Content-Type")
authorization := r.Header.Get("Authorization")
headers := RequestHeaders{
Content-Type: contentType,
Authorization: authorization}
return headers
}
您可以看到我们正在使用r.Header.Get("Content-Type")
方法来获取标头的值。
如果标头丢失,则Get()
方法将返回空字符串。