|
|
@@ -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 {
|