diff options
author | 2024-04-18 21:44:55 -0700 | |
---|---|---|
committer | 2024-04-19 10:50:46 -0700 | |
commit | 771f9d2b5fe40a034d206e166db0f040ac24fb22 (patch) | |
tree | 4d4fb97a9b9fea195eeca647626e4609df3c62b8 /internal/reader/fetcher/response_handler.go | |
parent | 647c66e70af50cf7ca786eba51d4fdb67b89fecc (diff) | |
download | v2-771f9d2b5fe40a034d206e166db0f040ac24fb22.tar.gz v2-771f9d2b5fe40a034d206e166db0f040ac24fb22.tar.zst v2-771f9d2b5fe40a034d206e166db0f040ac24fb22.zip |
reader/fetcher: add brotli content encoding support
Diffstat (limited to '')
-rw-r--r-- | internal/reader/fetcher/response_handler.go | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/internal/reader/fetcher/response_handler.go b/internal/reader/fetcher/response_handler.go index 03ab39ca..1aba5957 100644 --- a/internal/reader/fetcher/response_handler.go +++ b/internal/reader/fetcher/response_handler.go @@ -8,6 +8,7 @@ import ( "errors" "fmt" "io" + "log/slog" "net" "net/http" "net/url" @@ -71,12 +72,30 @@ func (r *ResponseHandler) Close() { } } +func (r *ResponseHandler) getReader(maxBodySize int64) io.ReadCloser { + slog.Debug("Request response", + slog.String("effective_url", r.EffectiveURL()), + slog.Int64("content_length", r.httpResponse.ContentLength), + slog.String("content_encoding", r.httpResponse.Header.Get("Content-Encoding")), + slog.String("content_type", r.httpResponse.Header.Get("Content-Type")), + ) + + reader := r.httpResponse.Body + switch r.httpResponse.Header.Get("Content-Encoding") { + case "br": + reader = NewBrotliReadCloser(r.httpResponse.Body) + case "gzip": + reader = NewGzipReadCloser(r.httpResponse.Body) + } + return http.MaxBytesReader(nil, reader, maxBodySize) +} + func (r *ResponseHandler) Body(maxBodySize int64) io.ReadCloser { - return http.MaxBytesReader(nil, r.httpResponse.Body, maxBodySize) + return r.getReader(maxBodySize) } func (r *ResponseHandler) ReadBody(maxBodySize int64) ([]byte, *locale.LocalizedErrorWrapper) { - limitedReader := http.MaxBytesReader(nil, r.httpResponse.Body, maxBodySize) + limitedReader := r.getReader(maxBodySize) buffer, err := io.ReadAll(limitedReader) if err != nil && err != io.EOF { |