2016-02-29 30 views
-1

我送POST請求:Golang變換http.Header到數組

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數據類型。請問有人可以幫助

+2

你可能會覺得這有幫助:https://golang.org/pkg/net/http/#Header – squiguy

回答

0

您可以用resp.Header().Get()檢索響應標頭的第一個值,如果標頭鍵沒有值,則返回""

因此,你的情況

var a [2]string 
a[0] = resp.Header().Get("server") 
a[1] = resp.Header().Get("date") 
3

resp.Headerhttp.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"] 

oktrue(即頭存在),你會得到一個包含所有值的字符串的切片爲那個頭;否則,ok將是false(即,標頭不存在)。

使用您喜歡的任何一種方法。

for name, value := range resp.Header() { 
    fmt.Printf("%v: %v\n", name, value) 
} 
1

你可以使用像這樣的一個功能:

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 
} 

應該返回

如果您需要遍歷所有的頭值,你可以像做陣列就像你想要的那樣。