From 284c90a80a08d5de9b9cbe6b313f6d5b5633e9b8 Mon Sep 17 00:00:00 2001 From: Tea Date: Wed, 11 Oct 2023 18:08:59 +0800 Subject: [PATCH 1/2] Fix http: ContentLength=xxx with Body length 0 --- digest.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/digest.go b/digest.go index ba099ad2..a1088007 100644 --- a/digest.go +++ b/digest.go @@ -55,6 +55,17 @@ func (dt *digestTransport) RoundTrip(req *http.Request) (*http.Response, error) req2.Header[k] = s } + // Fix http: ContentLength=xxx with Body length 0 + if req2.Body == nil { + req2.ContentLength = 0 + } else if req2.GetBody != nil { + var err error + req2.Body, err = req2.GetBody() + if err != nil { + return nil, err + } + } + // Make a request to get the 401 that contains the challenge. resp, err := dt.transport.RoundTrip(req) if err != nil || resp.StatusCode != http.StatusUnauthorized { From d3026f9b3e574db015e63819fd0f72c8bf4b528c Mon Sep 17 00:00:00 2001 From: icepie Date: Thu, 12 Oct 2023 13:37:49 +0800 Subject: [PATCH 2/2] test: add TestRequestDigestAuthWithBody --- request_test.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/request_test.go b/request_test.go index fd1222c5..7312128f 100644 --- a/request_test.go +++ b/request_test.go @@ -722,6 +722,25 @@ func TestRequestDigestAuthFail(t *testing.T) { logResponse(t, resp) } +func TestRequestDigestAuthWithBody(t *testing.T) { + conf := defaultDigestServerConf() + ts := createDigestServer(t, nil) + defer ts.Close() + + resp, err := dclr(). + SetDigestAuth(conf.username, conf.password). + SetResult(&AuthSuccess{}). + SetHeader(hdrContentTypeKey, "application/json"). + SetBody(map[string]interface{}{"zip_code": "00000", "city": "Los Angeles"}). + Post(ts.URL + conf.uri) + + assertError(t, err) + assertEqual(t, http.StatusOK, resp.StatusCode()) + + t.Logf("Result Success: %q", resp.Result().(*AuthSuccess)) + logResponse(t, resp) +} + func TestFormData(t *testing.T) { ts := createFormPostServer(t) defer ts.Close()