diff options
Diffstat (limited to 'http_request_dumper.go')
| -rw-r--r-- | http_request_dumper.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/http_request_dumper.go b/http_request_dumper.go new file mode 100644 index 0000000..e82d4e6 --- /dev/null +++ b/http_request_dumper.go @@ -0,0 +1,29 @@ +// SPDX-FileCopyrightText: 2024 M. Shulhan <ms@kilabit.info> +// SPDX-License-Identifier: GPL-3.0-or-later + +package trunks + +import ( + "bytes" + "fmt" + "net/http" + "net/http/httputil" +) + +// HTTPRequestDumper define an handler to convert [http.Request] into +// [RunResponse] DumpRequest. +type HTTPRequestDumper func(req *http.Request) ([]byte, error) + +// DumpHTTPRequest define default [HTTPRequestDumper] that convert +// [http.Request] with its body to stream of bytes using +// [httputil.DumpRequest]. +// +// The returned dump have CRLF ("\r\n") replaced with single LF ("\n"). +func DumpHTTPRequest(req *http.Request) (raw []byte, err error) { + raw, err = httputil.DumpRequestOut(req, true) + if err != nil { + return nil, fmt.Errorf(`DumpHTTPRequest: %w`, err) + } + raw = bytes.ReplaceAll(raw, []byte{'\r', '\n'}, []byte{'\n'}) + return raw, nil +} |
