Просмотр исходного кода

tools.http

- add `DecodeHttpResponse` helper
Alexey Kim 10 месяцев назад
Родитель
Сommit
606975a9b6
1 измененных файлов с 39 добавлено и 0 удалено
  1. 39 0
      internal/tools/http.go

+ 39 - 0
internal/tools/http.go

@@ -0,0 +1,39 @@
+package tools
+
+import (
+	"compress/gzip"
+	"compress/zlib"
+	"golang.org/x/net/html/charset"
+	"io"
+	"net/http"
+)
+
+func DecodeHttpResponse(response *http.Response) ([]byte, error) {
+	var (
+		contentEncoding           = response.Header.Get("Content-Encoding")
+		contentType               = response.Header.Get("Content-Type")
+		reader          io.Reader = response.Body
+	)
+
+	if "gzip" == contentEncoding {
+		if r, err := gzip.NewReader(response.Body); err == nil {
+			defer r.Close()
+			reader = r
+		}
+	} else if "deflate" == contentEncoding {
+		if r, err := zlib.NewReader(response.Body); err == nil {
+			defer r.Close()
+			reader = r
+		}
+	}
+
+	if "application/octet-stream" != contentType {
+		if r, err := charset.NewReader(reader, contentType); err == nil {
+			reader = r
+		} else {
+			return nil, err
+		}
+	}
+
+	return io.ReadAll(reader)
+}