自动解码
关于自动解码
默认情况下,req
会嗅探 HTTP 响应,如有需要会自动解码为 UTF-8 以避免乱码。
其原理是:
- 首先检测
Content-Type
头,如果是文本内容类型(json、xml、html 等),req
会尝试解码,如果不是,则不会解码。 - 如果没有
Content-Type
头,会提取响应体首部内容进行嗅探,如果嗅探出来明确不是 UTF-8,则自动解码为 UTF-8,如果字符集不确定,则不会尝试解码。
自定义
如果你不需要或担心自动解码影响性能,也可以关闭自动解码:
client.DisableAutoDecode()
还可以进行更高级的自定义:
// Try to auto-detect and decode all content types (some server may return incorrect Content-Type header)
client.SetAutoDecodeAllContentType()
// Only auto-detect and decode content which `Content-Type` header contains "html" or "json"
client.SetAutoDecodeContentType("html", "json")
// Or you can customize the function to determine whether to decode
fn := func(contentType string) bool {
if regexContentType.MatchString(contentType) {
return true
}
return false
}
client.SetAutoDecodeContentTypeFunc(fn)