transport.go 722 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package http
  2. import (
  3. "compress/gzip"
  4. "io"
  5. "net/http"
  6. "github.com/andybalholm/brotli"
  7. )
  8. type Transport struct {
  9. base http.RoundTripper
  10. }
  11. func NewTransport() *Transport {
  12. return &Transport{
  13. base: http.DefaultTransport,
  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. switch resp.Header.Get("Content-Encoding") {
  22. case "gzip":
  23. resp.Body, err = gzip.NewReader(resp.Body)
  24. if err != nil {
  25. resp.Body.Close()
  26. return nil, err
  27. }
  28. resp.Header.Del("Content-Encoding")
  29. case "br":
  30. resp.Body = io.NopCloser(brotli.NewReader(resp.Body))
  31. resp.Header.Del("Content-Encoding")
  32. }
  33. return resp, nil
  34. }