Browse Source

http

- add DecodeResponse
Alexey Kim 8 tháng trước cách đây
mục cha
commit
cf68c57980
1 tập tin đã thay đổi với 41 bổ sung0 xóa
  1. 41 0
      http/body.go

+ 41 - 0
http/body.go

@@ -0,0 +1,41 @@
+package http
+
+import (
+	"compress/gzip"
+	"compress/zlib"
+	"golang.org/x/net/html/charset"
+	"io"
+	"net/http"
+)
+
+func DecodeResponse(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 {
+			//goland:noinspection ALL
+			defer r.Close()
+			reader = r
+		}
+	} else if "deflate" == contentEncoding {
+		if r, err := zlib.NewReader(response.Body); err == nil {
+			//goland:noinspection ALL
+			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)
+}