Go 中处理带 deflate 压缩的 HTTP 响应并正确解析 JSON-Golang

go 的 `net/http` 默认不自动解压 `deflate` 编码响应,直接读取压缩字节会导致 `json.unmarshal` 报错“invalid character ‘x’ looking for beginning of value”;需手动检测 `content-encoding` 并使用 `compress/flate` 解压后再解析。

在 Go 中调用返回 Content-Encoding: deflate 的 HTTP 接口时,若未显式解压响应体,ioutil.ReadAll(res.Body)(或 io.ReadAll)将返回原始压缩字节流(如以字节 120 156 开头的 DEFLATE 数据),而非可读 JSON 字符串。此时 json.Unmarshal 尝试解析二进制数据,自然报错:invalid character ‘x’ looking for beginning of value(x 即 ASCII 120,是 DEFLATE 流的典型魔数)。

Go 标准库对 gzip 有自动支持(只要启用了 http.Transport 的 RegisterProtocol 或使用默认客户端且服务端发 gzip),但对 deflate 不提供自动解压——这是本问题的根本原因。

✅ 正确做法:手动识别并解压 deflate

需检查响应头 Content-Encoding,若为 deflate,则用 compress/flate 包解压。注意:HTTP 中的 deflate 指 RFC 1950 zlib 格式(含 zlib header),而 compress/flate 默认读取的是 RFC 1951 raw deflate 流。因此必须使用 zlib.NewReader(compress/zlib)而非 flate.NewReader。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » Go 中处理带 deflate 压缩的 HTTP 响应并正确解析 JSON-Golang
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4004449+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4004449+
  • 本周更新: 0+
  • 最后更新: 2026-03-16