【发布时间】:2012-10-03 13:52:28
【问题描述】:
我在 Go 中做一个简单的 http GET:
client := &http.Client{}
req, _ := http.NewRequest("GET", url, nil)
res, _ := client.Do(req)
但是我在doc中找不到自定义请求头的方法,谢谢
【问题讨论】:
我在 Go 中做一个简单的 http GET:
client := &http.Client{}
req, _ := http.NewRequest("GET", url, nil)
res, _ := client.Do(req)
但是我在doc中找不到自定义请求头的方法,谢谢
【问题讨论】:
如果你想设置多个标题,这比编写 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
}
【讨论】:
注意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)
【讨论】:
Go 的 net/http 包有很多 functions that deal with headers。其中有Add、Del、Get 和Set 方法。 Set的使用方式是:
func yourHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("header_name", "header_value")
}
【讨论】:
r *http.Request 并在w http.ResponseWriter 中返回一些东西。所以可能是因为您要返回标头,您需要将它们写入响应编写器。 w 是回复作者。你觉得这合乎逻辑吗?
请求的Header 字段是公开的。你可以这样做:
req.Header.Set("name", "value")
【讨论】: