diff options
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 { |