Commit 3c3e845 1 parent 3b2f67b commit 3c3e845 Copy full SHA for 3c3e845
File tree 2 files changed +40
-4
lines changed
2 files changed +40
-4
lines changed Original file line number Diff line number Diff line change @@ -2,6 +2,9 @@ package binding
2
2
3
3
import (
4
4
"bytes"
5
+ "compress/flate"
6
+ "compress/gzip"
7
+ "compress/zlib"
5
8
jsonpkg "encoding/json"
6
9
"errors"
7
10
"io"
@@ -60,12 +63,30 @@ func GetBody(r *http.Request) (*Body, error) {
60
63
body .Reset ()
61
64
return body , nil
62
65
default :
63
- var buf bytes.Buffer
64
- _ , err := io .Copy (& buf , r .Body )
65
- r .Body .Close ()
66
+ var err error
67
+ var closeBody = r .Body .Close
68
+ switch r .Header .Get ("Content-Encoding" ) {
69
+ case "gzip" :
70
+ var gzipReader * gzip.Reader
71
+ gzipReader , err = gzip .NewReader (r .Body )
72
+ if err == nil {
73
+ r .Body = gzipReader
74
+ }
75
+ case "deflate" :
76
+ r .Body = flate .NewReader (r .Body )
77
+ case "zlib" :
78
+ var readCloser io.ReadCloser
79
+ readCloser , err = zlib .NewReader (r .Body )
80
+ if err == nil {
81
+ r .Body = readCloser
82
+ }
83
+ }
66
84
if err != nil {
67
85
return nil , err
68
86
}
87
+ var buf bytes.Buffer
88
+ _ , _ = io .Copy (& buf , r .Body )
89
+ _ = closeBody ()
69
90
_body := & Body {
70
91
Buffer : & buf ,
71
92
bodyBytes : buf .Bytes (),
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ package binding
2
2
3
3
import (
4
4
"bytes"
5
+ "compress/gzip"
5
6
"io/ioutil"
6
7
"net/http"
7
8
"testing"
@@ -10,11 +11,25 @@ import (
10
11
)
11
12
12
13
func TestBody (t * testing.T ) {
14
+ const USE_GZIP = true
13
15
var buf bytes.Buffer
14
- buf .WriteString ("abc" )
16
+ if USE_GZIP {
17
+ w := gzip .NewWriter (& buf )
18
+ _ , err := w .Write ([]byte ("abc" ))
19
+ assert .NoError (t , err )
20
+ err = w .Flush ()
21
+ assert .NoError (t , err )
22
+ } else {
23
+ buf .WriteString ("abc" )
24
+ }
15
25
req := & http.Request {
16
26
Body : ioutil .NopCloser (& buf ),
17
27
}
28
+ if USE_GZIP {
29
+ req .Header = map [string ][]string {
30
+ "Content-Encoding" : []string {"gzip" },
31
+ }
32
+ }
18
33
body , err := GetBody (req )
19
34
assert .NoError (t , err )
20
35
b , err := ioutil .ReadAll (body )
You can’t perform that action at this time.
0 commit comments