【问题标题】:How to set headers in http get request?如何在http get请求中设置标头?
【发布时间】:2012-10-03 13:52:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: http go


    【解决方案1】:

    如果你想设置多个标题,这比编写 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
    }
    

    【讨论】:

      【解决方案2】:

      注意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)
      

      【讨论】:

      • 救命答案!!
      【解决方案3】:

      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")
      }
      

      【讨论】:

      • w 是什么类型?
      • @EswarYaganti 您如何发送标头?你得到一个r *http.Request 并在w http.ResponseWriter 中返回一些东西。所以可能是因为您要返回标头,您需要将它们写入响应编写器。 w 是回复作者。你觉得这合乎逻辑吗?
      • 原发帖人说他想“自定义request标头”。您的示例自定义了 response 标头。
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-08-23
        • 2011-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-24
        • 2018-11-15
        • 1970-01-01
        • 2015-08-20
        相关资源
        最近更新 更多