MCPcopy
hub / github.com/probelabs/goreplay / prettifyHTTP

Function prettifyHTTP

http_prettifier.go:14–67  ·  view source on GitHub ↗
(p []byte)

Source from the content-addressed store, hash-verified

12)
13
14func prettifyHTTP(p []byte) []byte {
15
16 tEnc := bytes.Equal(proto.Header(p, []byte("Transfer-Encoding")), []byte("chunked"))
17 cEnc := bytes.Equal(proto.Header(p, []byte("Content-Encoding")), []byte("gzip"))
18
19 if !(tEnc || cEnc) {
20 return p
21 }
22
23 headersPos := proto.MIMEHeadersEndPos(p)
24
25 if headersPos < 5 || headersPos > len(p) {
26 return p
27 }
28
29 headers := p[:headersPos]
30 content := p[headersPos:]
31
32 if tEnc {
33 buf := bytes.NewReader(content)
34 r := httputil.NewChunkedReader(buf)
35 content, _ = ioutil.ReadAll(r)
36
37 headers = proto.DeleteHeader(headers, []byte("Transfer-Encoding"))
38
39 newLen := strconv.Itoa(len(content))
40 headers = proto.SetHeader(headers, []byte("Content-Length"), []byte(newLen))
41 }
42
43 if cEnc {
44 buf := bytes.NewReader(content)
45 g, err := gzip.NewReader(buf)
46
47 if err != nil {
48 Debug(1, "[Prettifier] GZIP encoding error:", err)
49 return []byte{}
50 }
51
52 content, err = ioutil.ReadAll(g)
53 if err != nil {
54 Debug(1, fmt.Sprintf("[HTTP-PRETTIFIER] %q", err))
55 return p
56 }
57
58 headers = proto.DeleteHeader(headers, []byte("Content-Encoding"))
59
60 newLen := strconv.Itoa(len(content))
61 headers = proto.SetHeader(headers, []byte("Content-Length"), []byte(newLen))
62 }
63
64 newPayload := append(headers, content...)
65
66 return newPayload
67}

Callers 4

TestHTTPPrettifierGzipFunction · 0.85
copyMethod · 0.85
CopyMultyFunction · 0.85

Calls 5

HeaderFunction · 0.92
MIMEHeadersEndPosFunction · 0.92
DeleteHeaderFunction · 0.92
SetHeaderFunction · 0.92
DebugFunction · 0.70

Tested by 2

TestHTTPPrettifierGzipFunction · 0.68