gpt4 book ai didi

go - Gzip 未压缩的 http.Response.Body

转载 作者:IT王子 更新时间:2023-10-29 00:39:26 25 4
gpt4 key购买 nike

我正在构建一个 Go 应用程序,该应用程序采用 http.Response 对象并将其(响应 header 和正文)保存到 redis 哈希。当应用程序收到未压缩的 http.Response.Body 时,我想在将其保存到缓存之前对其进行压缩。

我的困惑源于我无法清楚地理解 Go 的 io 接口(interface),以及如何在 http.Response.Bodyio.ReadCloser 之间进行协商 和 gzip Writer。我想这里有一个优雅的流式解决方案,但我无法让它正常工作。

最佳答案

如果您已经确定主体未压缩,并且如果您需要压缩数据的[]byte(而不是例如,已经有了一个可以写入的 io.Writer,例如,如果您想将正文保存到文件中,那么您希望将其流式传输到文件中而不是缓冲区中)然后像这样应该工作:

func getCompressedBody(r *http.Response) ([]byte, error) {
var buf bytes.Buffer
gz := gzip.NewWriter(&buf)
if _, err := io.Copy(gz, r.Body); err != nil {
return nil, err
}
err := gz.Close()
return buf.Bytes(), err
}

(这只是一个例子,可能是内联的而不是作为一个函数;如果你想把它作为一个函数,那么它可能应该采用 io.Reader 而不是 *http.Response).

关于go - Gzip 未压缩的 http.Response.Body,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31056785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com