216

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

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

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

4

4 回答 4

306

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

req.Header.Set("name", "value")
于 2012-10-12T17:36:52.097 回答
60

注意http.Request header中的“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"
client := &http.Client{}
resp, err := client.Do(req)
于 2016-12-08T08:05:44.083 回答
14

如果你想设置多个标题,这比编写 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
}
于 2021-06-17T12:01:28.583 回答
1

Go 的 net/http 包有许多处理 headers 的函数。其中包括AddDelGetSet方法。Set的使用方法是:

func yourHandler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("header_name", "header_value")
}
于 2016-06-19T19:14:48.950 回答