Skip to content

Instantly share code, notes, and snippets.

@farhany
Forked from mrosset/clientDoGzip.go
Created September 16, 2021 00:17
Show Gist options
  • Save farhany/bdf632015e95b3eb278626b692d3f8b0 to your computer and use it in GitHub Desktop.
Save farhany/bdf632015e95b3eb278626b692d3f8b0 to your computer and use it in GitHub Desktop.
Client.Do will not uncompress response body
package main
// run this file with `go run clientDoGzip.go, and then file tmp.out to verify body is gzipped
import "compress/gzip"
import "net/http"
import "fmt"
import "io"
import "log"
import "os"
func main() {
url := "http://bash.cyberciti.biz/wp-content/themes/bashshell/custom/images/headerbg.gif"
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Accept-Encoding", "gzip")
if err != nil {
log.Fatal(err)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
for k, v := range resp.Header {
fmt.Println(k+":", v)
}
var r io.Reader
switch req.Header.Get("Accept-Encoding") {
case "gzip":
r, err = gzip.NewReader(resp.Body)
if err != nil {
log.Fatal(err)
}
default:
r = resp.Body
}
fd, err := os.Create("tmp.out")
if err != nil {
log.Fatal(err)
}
_, err = io.Copy(fd, r)
if err != nil {
log.Fatal(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment