Golang 中HTTP请求头 Accept-Encoding 注意事项
Contents
平时自己写了个抓取网页内容分析的小工具, 通过 Chrome 的 copy as curl 功能复制出 curl , 然后再将 curl 通过工具自动转换为 golang 的 http 请求代码, 但是HTTP response 一直返回乱码.
最后发现, 原来是 Golang 这里有特别处理了的.
可以看到, 源码这里有显式的说明:
如果
DisableCompression
为true
, 则表示禁用压缩请求Accept-Encoding: gzip
. 如果是一个gzip
请求, 并且返回了一个gzip
的响应, 则它会自动进行解码.但, 如果用户显式地请求一个
gzip
的话, 则它不会自动解码!
因为通过 curl 的代码生成的 Golang http 请求, 它是显式地设置了 Accept-Encoding: gzip
的, 所以, 在 Golang 中, 默认情况下返回的 http response 是不会自动解码的.
最简单的解决办法就是, 去掉这种显式请求头 Accept-Encoding
即可.
如果确实想手动进行解码, 则可调用 Golang 的标准库中的 gzip
包. gzip.NewReader
来进行读取 gzip
的编码输入源即可.