summaryrefslogtreecommitdiff
path: root/internal/reader/fetcher/response_handler.go
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <f@miniflux.net> 2024-04-18 21:44:55 -0700
committerGravatar Frédéric Guillot <f@miniflux.net> 2024-04-19 10:50:46 -0700
commit771f9d2b5fe40a034d206e166db0f040ac24fb22 (patch)
tree4d4fb97a9b9fea195eeca647626e4609df3c62b8 /internal/reader/fetcher/response_handler.go
parent647c66e70af50cf7ca786eba51d4fdb67b89fecc (diff)
downloadv2-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.go23
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 {