最近网关又接入了个项目,不过在解析接口返回的 json 串时,却是乱码,查看报错如下
invalid character '\x1f' looking for beginning of value
程序中的解析代码为
content, _ := ioutil.ReadAll(res.Body)
err = json.Unmarshal(content, &data)
if err != nil {
fmt.Println(err.Error())
}
之前的项目接口解析还是好好的,为啥这个项目不行呢,于是打断点调试
res, err := cli.Do(req)
并分别调用两个项目接口,这一对比就发现了,新接入的项目接口返回头里有
Content-Encoding: gzip
原来是用 gzip 压缩了,因此网关需判断头里是否有此 header 头,再用 compress/gzip 解压即可。
gzipFlag := false
for k, v := range res.Header {
if strings.ToLower(k) == "content-encoding" && strings.ToLower(v[0]) == "gzip" {
gzipFlag = true
}
}
var content []byte
if gzipFlag {
gr, err := gzip.NewReader(res.Body)
defer gr.Close()
if err != nil {
fmt.Println(err.Error())
}
content, _ = ioutil.ReadAll(gr)
} else {
content, _ = ioutil.ReadAll(res.Body)
}
err = json.Unmarshal(content, &data)
if err != nil {
fmt.Println(err.Error())
}
|