diff --git a/client.go b/client.go index 12ac50b..aad1ec2 100644 --- a/client.go +++ b/client.go @@ -523,6 +523,11 @@ func baseRetryPolicy(resp *http.Response, err error) (bool, error) { return true, nil } + // Retry when the response is nil as this can indicate a closed connection or some other temporary condition + if resp == nil { + return true, nil + } + // 429 Too Many Requests is recoverable. Sometimes the server puts // a Retry-After response header to indicate when the server is // available to start processing request from client. diff --git a/client_test.go b/client_test.go index 3c37ef6..1d01ef8 100644 --- a/client_test.go +++ b/client_test.go @@ -1268,3 +1268,16 @@ func TestClient_RedirectWithBody(t *testing.T) { t.Fatalf("Expected the client to be redirected 2 times, got: %d", atomic.LoadInt32(&redirects)) } } + +func TestClient_baseRetryPolicy(t *testing.T) { + t.Parallel() + var response *http.Response = nil + + ok, err := baseRetryPolicy(response, nil) + if !ok { + t.Fatalf("expected %v, got %v", true, ok) + } + if err != nil { + t.Fatalf("no error expected") + } +}