如何在http get请求中设置标头?

时间:2012-10-12 17:33:04

标签: http go

我在Go中做了一个简单的http GET:

client := &http.Client{}
req, _ := http.NewRequest("GET", url, nil)
res, _ := client.Do(req)

但我找不到在doc中自定义请求标头的方法,谢谢

5 个答案:

答案 0 :(得分:167)

请求的Header字段是公开的。你可以这样做:

req.Header.Set("name", "value")

答案 1 :(得分:14)

请注意http.Request标题" Host"无法通过Set方法设置

req.Header.Set("Host", "domain.tld")

但可以直接设置:

req.Host = "domain.tld"

req, err := http.NewRequest("GET", "http://10.0.0.1/", nil)
if err != nil {
    ...
}

req.Host = "domain.tld"

resp, err := http.Client.Do(req)

答案 2 :(得分:0)

Go的net / http包有很多functions that deal with headers。其中包括AddDelGetSet方法。使用Set的方法是:

func yourHandler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("header_name", "header_value")
}

答案 3 :(得分:0)

如果您想设置多个标题,这比编写 set 语句更方便。

client := http.Client{}
req , err := http.NewRequest("GET", url, nil)
if err != nil {
    //Handle Error
}

req.Header = http.Header{
    "Host": []string{"www.host.com"},
    "Content-Type": []string{"application/json"},
    "Authorization": []string{"Bearer Token"},
}

res , err := client.Do(req)
if err != nil {
    //Handle Error
}

答案 4 :(得分:-1)

w.Header().Set("k", "v"))

应在

之前调用
w.WriteHeader(statusCode)