diff --git a/request.go b/request.go index 0d95f65..78713bd 100644 --- a/request.go +++ b/request.go @@ -1300,7 +1300,6 @@ func (r *Request) Execute(method, url string) (res *Response, err error) { }() r.Method = method - r.URL = url if r.RetryCount < 0 { r.RetryCount = 0 // default behavior is no retry @@ -1318,6 +1317,7 @@ func (r *Request) Execute(method, url string) (res *Response, err error) { for i := 0; i <= r.RetryCount; i++ { r.Attempt++ err = nil + r.URL = url res, err = r.client.execute(r) if err != nil { if irErr, ok := err.(*invalidRequestError); ok { diff --git a/retry_test.go b/retry_test.go index eaa0421..0691fdd 100644 --- a/retry_test.go +++ b/retry_test.go @@ -906,6 +906,35 @@ func TestRetryRequestPostIoReadSeeker(t *testing.T) { assertEqual(t, "", resp.String()) } +func TestRetryQueryParamsGH938(t *testing.T) { + ts := createGetServer(t) + defer ts.Close() + + expectedQueryParams := "foo=baz&foo=bar&foo=bar" + + c := dcnl(). + SetBaseURL(ts.URL). + SetRetryCount(5). + SetRetryWaitTime(10 * time.Millisecond). + SetRetryMaxWaitTime(20 * time.Millisecond). + AddRetryCondition( + func(r *Response, _ error) bool { + assertEqual(t, expectedQueryParams, r.Request.RawRequest.URL.RawQuery) + return true // always retry + }, + ) + + _, _ = c.R(). + SetQueryParamsFromValues(map[string][]string{ + "foo": { + "baz", + "bar", + "bar", + }, + }). + Get("/set-retrycount-test") +} + func TestRetryCoverage(t *testing.T) { t.Run("apply retry default min and max value", func(t *testing.T) { backoff := newBackoffWithJitter(0, 0)