将未更改的小写标题添加到golang http请求

时间:2014-07-24 23:45:02

标签: go

我正在尝试在golang程序中设置全小写标题,而CanonicalMIMEHeaderKey正在大写第一个字母。我正在使用的API目前只采用全小写的特定标头。目前还不能改变它。有没有办法覆盖它?

http://golang.org/pkg/net/textproto/#CanonicalMIMEHeaderKey

例如,我要添加的标题是:

req.Header.Add("myheader", "myheadervalue")

但它出现了:

req.Header.Add("Myheader", "myheadervalue")

有人可以帮忙吗?

由于

3 个答案:

答案 0 :(得分:6)

我没有办法绕过这个但是如果你真的必须使用小写标题名称,那么你可以通过使用小写密钥创建自己的http.Header来解决这个问题。示例(on play):

import "fmt"
import "strings"
import "net/http"

// ...

req, _ := http.NewRequest("GET", "http://foo", nil) 
req.Header.Add("myheader", "myheadervalue")

lowerCaseHeader := make(http.Header)

for key, value := range req.Header {
    lowerCaseHeader[strings.ToLower(key)] = value
}

req.Header = lowerCaseHeader

答案 1 :(得分:2)

我遇到了一个类似的问题并且解决了一个稍微不同的方式,我认为这可能会对将来有人来这个帖子有所帮助......

由于http.Header只是一个map[string][]string,您可以创建一个http.Header,然后将其分配给请求的标头。因为这不使用Add和Set方法,所以这将保留套管。

像这样:

import "net/http"

// ...

headers := http.Header{
            "my-lowercase-header": []string{"myvalue1"},
            "Accept": []string{"text/plain", "text/html"},
        }

client := &http.Client{}

req, err := http.NewRequest("GET", "http://www.example.com", nil)
if err != nil {
    panic(err)
}

req.Header = headers

resp, err := client.Do(req)

答案 2 :(得分:0)

还有另一种简单的方法。

req.Header["myheader] = []string{"myheadervalue"}