golang 中http请求时 header头字段首字母自动大写问题

golang 中http请求时 header头字段首字母自动大写问题,第1张

当使用http请求,设置header头, 使用的方法: req.Header.Set(k, v) 发现请求过程中 k的首字母自动变为了大写,查看下发现使用了 CanonicalMIMEHeaderKey 这个函数 , 自动将首字母转化了
// CanonicalMIMEHeaderKey returns the canonical format of the
// MIME header key s. The canonicalization converts the first
// letter and any letter following a hyphen to upper case;
// the rest are converted to lowercase. For example, the
// canonical key for "accept-encoding" is "Accept-Encoding".
// MIME header keys are assumed to be ASCII only.
// If s contains a space or invalid header field bytes, it is
// returned without modifications.
func CanonicalMIMEHeaderKey(s string) string {
	commonHeaderOnce.Do(initCommonHeader)

	// Quick check for canonical encoding.
	upper := true
	for i := 0; i < len(s); i++ {
		c := s[i]
		if !validHeaderFieldByte(c) {
			return s
		}
		if upper && 'a' <= c && c <= 'z' {
			return canonicalMIMEHeaderKey([]byte(s))
		}
		if !upper && 'A' <= c && c <= 'Z' {
			return canonicalMIMEHeaderKey([]byte(s))
		}
		upper = c == '-'
	}
	return s
}
header 结构
	type Header map[string][]string

可以直接用map的方式写入:

	req.Header[k] = []string{v}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/995712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存