From 9ef9b6f90d02d7c0e2dbdef3ed4f38748271b6d4 Mon Sep 17 00:00:00 2001 From: Mohan Raj Date: Fri, 22 Sep 2023 11:29:54 +0530 Subject: [PATCH] Set ContentLength=0 when body is nil and setContentLength is true (#698) --- client_test.go | 11 +++++++++++ middleware.go | 8 ++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/client_test.go b/client_test.go index da098fbc..4a27ecf2 100644 --- a/client_test.go +++ b/client_test.go @@ -488,6 +488,17 @@ func TestClientOptions(t *testing.T) { assertEqual(t, client.closeConnection, true) } +func TestContentLengthWhenBodyIsNil(t *testing.T) { + client := dc() + + client.SetPreRequestHook(func(c *Client, r *http.Request) error { + assertEqual(t, "0", r.Header.Get(hdrContentLengthKey)) + return nil + }) + + client.R().SetContentLength(true).SetBody(nil).Get("http://localhost") +} + func TestClientPreRequestHook(t *testing.T) { client := dc() client.SetPreRequestHook(func(c *Client, r *http.Request) error { diff --git a/middleware.go b/middleware.go index 9b19c463..2b33b134 100644 --- a/middleware.go +++ b/middleware.go @@ -166,8 +166,12 @@ func parseRequestBody(c *Client, r *Request) (err error) { CL: // by default resty won't set content length, you can if you want to :) - if (c.setContentLength || r.setContentLength) && r.bodyBuf != nil { - r.Header.Set(hdrContentLengthKey, fmt.Sprintf("%d", r.bodyBuf.Len())) + if c.setContentLength || r.setContentLength { + if r.bodyBuf == nil { + r.Header.Set(hdrContentLengthKey, "0") + } else { + r.Header.Set(hdrContentLengthKey, fmt.Sprintf("%d", r.bodyBuf.Len())) + } } return