我正在尝试在golang程序中设置全小写标题,而CanonicalMIMEHeaderKey正在大写第一个字母。我正在使用的API目前只采用全小写的特定标头。目前还不能改变它。有没有办法覆盖它?
http://golang.org/pkg/net/textproto/#CanonicalMIMEHeaderKey
例如,我要添加的标题是:
req.Header.Add("myheader", "myheadervalue")
但它出现了:
req.Header.Add("Myheader", "myheadervalue")
有人可以帮忙吗?
由于
答案 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"}