mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-17 17:34:09 +02:00
core: fix parsing Retry-After header in TooManyRequestsException
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using Jackett.Common.Utils.Clients;
|
using Jackett.Common.Utils.Clients;
|
||||||
|
|
||||||
namespace Jackett.Common.Exceptions
|
namespace Jackett.Common.Exceptions
|
||||||
@@ -16,14 +17,16 @@ namespace Jackett.Common.Exceptions
|
|||||||
public TooManyRequestsException(string message, WebResult response)
|
public TooManyRequestsException(string message, WebResult response)
|
||||||
: base(message)
|
: base(message)
|
||||||
{
|
{
|
||||||
if (response.Headers.ContainsKey("Retry-After"))
|
if (response.Headers.TryGetValue("Retry-After", out var header) && header.FirstOrDefault() is {} retryAfter)
|
||||||
{
|
{
|
||||||
var retryAfter = response.Headers["Retry-After"].ToString();
|
|
||||||
|
|
||||||
if (int.TryParse(retryAfter, out var seconds))
|
if (int.TryParse(retryAfter, out var seconds))
|
||||||
|
{
|
||||||
RetryAfter = TimeSpan.FromSeconds(seconds);
|
RetryAfter = TimeSpan.FromSeconds(seconds);
|
||||||
|
}
|
||||||
else if (DateTime.TryParse(retryAfter, out var date))
|
else if (DateTime.TryParse(retryAfter, out var date))
|
||||||
|
{
|
||||||
RetryAfter = date.ToUniversalTime() - DateTime.UtcNow;
|
RetryAfter = date.ToUniversalTime() - DateTime.UtcNow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -453,7 +453,9 @@ namespace Jackett.Server.Controllers
|
|||||||
var retryAfter = Convert.ToInt32(tooManyRequestsException.RetryAfter.TotalSeconds);
|
var retryAfter = Convert.ToInt32(tooManyRequestsException.RetryAfter.TotalSeconds);
|
||||||
|
|
||||||
if (retryAfter > 0)
|
if (retryAfter > 0)
|
||||||
|
{
|
||||||
HttpContext.Response.Headers.Add("Retry-After", $"{retryAfter}");
|
HttpContext.Response.Headers.Add("Retry-After", $"{retryAfter}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return GetErrorXML(900, ex.Message, StatusCodes.Status429TooManyRequests);
|
return GetErrorXML(900, ex.Message, StatusCodes.Status429TooManyRequests);
|
||||||
|
Reference in New Issue
Block a user