From 0c11e4bc13c7fa1703239d36357c3d6045593595 Mon Sep 17 00:00:00 2001 From: mountain Date: Tue, 27 Jun 2023 15:17:55 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A1=9C=EA=B9=85=EC=9A=A9=20http=20request=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/server.go b/server.go index 4dc4530..4d83052 100644 --- a/server.go +++ b/server.go @@ -536,3 +536,51 @@ func MakeRPCError() *RpcReturnError { h: nil, } } + +type indirectBody struct { + inner io.ReadCloser + dump []byte + closer func() +} + +func (ib *indirectBody) Read(p []byte) (n int, err error) { + n, err = ib.inner.Read(p) + if n > 0 { + ib.dump = append(ib.dump, p...) + } + return +} + +func (ib *indirectBody) Close() error { + if ib.closer != nil { + ib.closer() + ib.closer = nil + } + return ib.inner.Close() +} + +func MakeHttpRequestForLogging(r *http.Request) *http.Request { + ib := &indirectBody{ + inner: r.Body, + } + + closer := func() { + var uv url.Values + + if r.Form != nil { + uv = r.Form + } else { + uv = r.URL.Query() + } + + logger.Println("request :") + logger.Println(" header :", r.Header) + logger.Println(" values :", uv) + logger.Println(" body :", string(ib.dump)) + } + + ib.closer = closer + + r.Body = ib + return r +}