diff --git a/pkg/target/http/logroundtripper.go b/pkg/target/http/logroundtripper.go new file mode 100644 index 00000000..5b89a400 --- /dev/null +++ b/pkg/target/http/logroundtripper.go @@ -0,0 +1,37 @@ +package http + +import ( + "fmt" + "go.uber.org/zap" + "net/http" + "net/http/httputil" +) + +func NewLoggingRoundTripper(roundTripper http.RoundTripper) http.RoundTripper { + return &logRoundTripper{roundTripper: roundTripper} +} + +type logRoundTripper struct { + roundTripper http.RoundTripper +} + +func (rt *logRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + logger := zap.L() + if logger.Core().Enabled(zap.DebugLevel) { + if info, err := httputil.DumpRequest(req, true); err == nil { + logger.Debug(fmt.Sprintf("Sending request: %s", string(info))) + if err != nil { + return nil, err + } + } + } + resp, err := rt.roundTripper.RoundTrip(req) + if resp != nil { + if logger.Core().Enabled(zap.DebugLevel) { + if info, err := httputil.DumpResponse(resp, true); err == nil { + logger.Debug(fmt.Sprintf("Received response: %s", string(info))) + } + } + } + return resp, err +} diff --git a/pkg/target/http/utils.go b/pkg/target/http/utils.go index 26547091..1f8b52f7 100644 --- a/pkg/target/http/utils.go +++ b/pkg/target/http/utils.go @@ -5,8 +5,8 @@ import ( "crypto/tls" "crypto/x509" "encoding/json" - "io/ioutil" "net/http" + "os" "time" "go.uber.org/zap" @@ -86,11 +86,11 @@ func NewClient(certificatePath string, skipTLS bool) *http.Client { } client := &http.Client{ - Transport: transport, + Transport: NewLoggingRoundTripper(transport), } if certificatePath != "" { - caCert, err := ioutil.ReadFile(certificatePath) + caCert, err := os.ReadFile(certificatePath) if err != nil { zap.L().Error("failed to read certificate", zap.String("path", certificatePath)) return client