为了账号安全,请及时绑定邮箱和手机立即绑定

在Go中读取gzip压缩的HTTP响应

在Go中读取gzip压缩的HTTP响应

Go
手掌心 2021-05-07 18:50:07
我正在尝试使用Go阅读gzip压缩的HTTP响应!但我总是收到以下错误消息:panic: gzip: invalid header[...] stack trace [...]如果我运行“ curl -H” Accept-Encoding:gzip“ http://foo.com/ | gunzip-”,我得到的响应将正确压缩。我也用ngrep仔细检查过,正确发送/返回了对Accept-Encoding / Content-Encoding。如果我创建了一个包含一些虚拟内容的文件并将其gzip压缩,则可以从Go中读取它!程序。我用于测试的程序:package mainimport (    "io"    //"os"    "fmt"    "compress/gzip"    "net/http")func main() {    /* This works fine    f, _ := os.Open("/tmp/test.gz")    defer f.Close()    reader, err := gzip.NewReader(f)    */    // This does not :/    resp, _ := http.Get("http://foo.com/")    defer resp.Body.Close()    reader, err := gzip.NewReader(resp.Body)    if err != nil { panic(err) }    buff := make([]byte, 1024)    for {        n, err := reader.Read(buff)        if err != nil && err != io.EOF {            panic(err)        }        if n == 0 {            break        }    }    s := fmt.Sprintf("%s", buff)    fmt.Println(s)}我忽略了什么吗?
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

net/http#Transport处理gzip压缩的响应。您不必做任何特别的事情。

看看这里DisableCompression选项。


查看完整回答
反对 回复 2021-05-17
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

根据net / http docs(第110行)的说明,如果您手动设置Accept-Encoding请求标头,则gzip压缩的响应将不会被http.Transport自动解压缩。否则,行为由Transport的DisableCompression布尔值控制

查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 588 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信