transport.go 724 B

123456789101112131415161718192021222324252627282930313233343536
  1. package http
  2. import (
  3. "io"
  4. "net/http"
  5. "github.com/andybalholm/brotli"
  6. "github.com/klauspost/compress/gzhttp"
  7. )
  8. type Transport struct {
  9. base http.RoundTripper
  10. }
  11. func NewTransport() *Transport {
  12. return &Transport{
  13. base: gzhttp.Transport(http.DefaultTransport, gzhttp.TransportAlwaysDecompress(true)),
  14. }
  15. }
  16. func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {
  17. resp, err := t.base.RoundTrip(req)
  18. if err != nil {
  19. return nil, err
  20. }
  21. if resp.Header.Get("Content-Encoding") == "br" {
  22. resp.Body = io.NopCloser(brotli.NewReader(resp.Body))
  23. resp.Header.Del("Content-Encoding")
  24. resp.Header.Del("Content-Length")
  25. resp.ContentLength = -1
  26. resp.Uncompressed = true
  27. }
  28. return resp, nil
  29. }