如何在HTTP GET请求中设置头信息?

280

我在Go语言中进行了一个简单的HTTP GET请求:

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

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

4个回答

383

请求的Header字段是公共的。您可以这样做:

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

85

请注意,在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"
client := &http.Client{}
resp, err := client.Do(req)

4
拯救生命的答案!! - hunter_tech
这是一个很棒的回答!!!主机正在阻止。 - Powerful Lee

50

如果您想设置多个标题,使用这种方法会更方便,而不是编写多个set语句。

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

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

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

0

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

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

7
w是什么类型? - Eswar Yaganti
@EswarYaganti,您是如何发送标头的?您会收到一个 r *http.Request 并在 w http.ResponseWriter 中返回某些内容。因此,由于您正在返回标头,您需要将它们写入响应输出流中。而 w 就是响应输出流。这对您来说是否合理? - Salvador Dali
19
原帖作者想要“定制请求头”。而您的例子是在定制“响应头”。请问您需要翻译其它内容吗? - Martin Del Vecchio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接