Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Original file line number Diff line number Diff line change
Expand Up @@ -690,7 +690,7 @@ internal virtual void PrepareSession()
{
WebSession.MaximumRetryCount = MaximumRetryCount;

// only set retry interval if retry count is set.
// Only set retry interval if retry count is set.
WebSession.RetryIntervalInSeconds = RetryIntervalSec;
}
}
Expand Down Expand Up @@ -1439,16 +1439,36 @@ internal virtual HttpResponseMessage GetResponse(HttpClient client, HttpRequestM
// When MaximumRetryCount is not specified, the totalRequests == 1.
if (totalRequests > 1 && ShouldRetry(response.StatusCode))
{
int retryIntervalInSeconds = WebSession.RetryIntervalInSeconds;

// If the status code is 429 get the retry interval from the Headers.
// Ignore broken header and its value.
if (response.StatusCode is HttpStatusCode.Conflict && response.Headers.TryGetValues(HttpKnownHeaderNames.RetryAfter, out IEnumerable<string> retryAfter))
{
try
{
IEnumerator<string> enumerator = retryAfter.GetEnumerator();
if (enumerator.MoveNext())
{
retryIntervalInSeconds = Convert.ToInt32(enumerator.Current);
}
}
catch
{
// Ignore broken header.
}
}

string retryMessage = string.Format(
CultureInfo.CurrentCulture,
WebCmdletStrings.RetryVerboseMsg,
RetryIntervalSec,
retryIntervalInSeconds,
response.StatusCode);

WriteVerbose(retryMessage);

_cancelToken = new CancellationTokenSource();
Task.Delay(WebSession.RetryIntervalInSeconds * 1000, _cancelToken.Token).GetAwaiter().GetResult();
Task.Delay(retryIntervalInSeconds * 1000, _cancelToken.Token).GetAwaiter().GetResult();
_cancelToken.Cancel();
_cancelToken = null;

Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.