猿问

Golang 将 http.Header 转化为数组

我正在发送 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数据类型。有人可以帮忙吗


Qyouu
浏览 367回答 3
3回答

缥缈止盈

resp.Header是 类型http.Header。您可以在文档中看到该类型也是 a map,因此您可以通过两种不同的方式访问它:1) 通过 usinghttp.Header的方法:serverValue := resp.Header().Get("Server")dataValue := resp.Header().Get("Date")如果标头存在,您将获得它的第一个值(请记住,单个标头名称可能有多个值);否则你会得到一个空字符串。2) 通过 usingmap的方法: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)}

呼唤远方

你可以使用这样的函数: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}它应该返回一个你想要的数组。

青春有我

此解决方案适用于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()方法将返回空字符串。
随时随地看视频慕课网APP

相关分类

Go
我要回答