golang gzip 如何解压http收到的数据,
时间: 2024-04-05 17:30:00 浏览: 213
在 Go 语言中,可以使用标准库中的 gzip 包来解压缩 .gz 文件或者 HTTP 请求中的 gzip 压缩数据。以下是一个示例代码,演示如何解压缩 HTTP 请求中的 gzip 数据:
```go
package main
import (
"compress/gzip"
"io/ioutil"
"net/http"
)
func main() {
// 创建 HTTP 客户端
client := &http.Client{}
// 创建 HTTP 请求
req, err := http.NewRequest("GET", "http://example.com", nil)
if err != nil {
panic(err)
}
// 设置 HTTP 请求头,告知服务器可以接收 gzip 压缩数据
req.Header.Set("Accept-Encoding", "gzip")
// 发送 HTTP 请求
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
// 检查 HTTP 响应头,判断响应是否使用 gzip 压缩
var reader io.ReadCloser
switch resp.Header.Get("Content-Encoding") {
case "gzip":
// 如果使用 gzip 压缩,则使用 gzip 解压缩器进行解压
reader, err = gzip.NewReader(resp.Body)
if err != nil {
panic(err)
}
defer reader.Close()
default:
// 如果未使用 gzip 压缩,则直接读取响应内容
reader = resp.Body
}
// 读取 HTTP 响应内容
body, err := ioutil.ReadAll(reader)
if err != nil {
panic(err)
}
// 处理 HTTP 响应内容
// ...
}
```
在上面的示例代码中,我们首先创建了一个 HTTP 客户端,并创建了一个 HTTP 请求。然后,我们设置了 HTTP 请求头,告知服务器可以接收 gzip 压缩数据。接着,我们发送 HTTP 请求,并读取 HTTP 响应内容。在读取 HTTP 响应内容时,我们检查了响应头中的 Content-Encoding 字段,如果该字段为 gzip,则使用 gzip 解压缩器进行解压缩。最后,我们处理了 HTTP 响应内容。
阅读全文