我正在尝试使用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 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
根据net / http docs(第110行)的说明,如果您手动设置Accept-Encoding请求标头,则gzip压缩的响应将不会被http.Transport自动解压缩。否则,行为由Transport的DisableCompression布尔值控制
- 3 回答
- 0 关注
- 588 浏览
添加回答
举报
0/150
提交
取消