| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package http
- import (
- "io"
- "net/http"
- "github.com/andybalholm/brotli"
- "github.com/klauspost/compress/gzip"
- "github.com/klauspost/compress/zstd"
- )
- type Transport struct {
- base http.RoundTripper
- }
- func NewTransport() *Transport {
- return &Transport{
- base: http.DefaultTransport,
- }
- }
- func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {
- resp, err := t.base.RoundTrip(req)
- if err != nil {
- return nil, err
- }
- switch resp.Header.Get("Content-Encoding") {
- case "gzip":
- resp.Body, err = gzip.NewReader(resp.Body)
- if err != nil {
- resp.Body.Close()
- return nil, err
- }
- resp.Header.Del("Content-Encoding")
- case "zstd":
- decoder, err := zstd.NewReader(resp.Body)
- if err != nil {
- resp.Body.Close()
- return nil, err
- }
- resp.Body = io.NopCloser(decoder)
- resp.Header.Del("Content-Encoding")
- case "br":
- resp.Body = io.NopCloser(brotli.NewReader(resp.Body))
- resp.Header.Del("Content-Encoding")
- }
- return resp, nil
- }
|