mirror of
https://github.com/C9Glax/tranga.git
synced 2025-09-10 03:48:19 +02:00
Fix request limits for UserAgents not being set correctly
This commit is contained in:
@@ -14,18 +14,22 @@ public abstract class DownloadClient
|
|||||||
this.Log = LogManager.GetLogger(GetType());
|
this.Log = LogManager.GetLogger(GetType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO Requests still go too fast across threads!
|
||||||
public RequestResult MakeRequest(string url, RequestType requestType, string? referrer = null, string? clickButton = null)
|
public RequestResult MakeRequest(string url, RequestType requestType, string? referrer = null, string? clickButton = null)
|
||||||
{
|
{
|
||||||
Log.Debug($"Requesting {requestType} {url}");
|
Log.Debug($"Requesting {requestType} {url}");
|
||||||
if (!Tranga.Settings.RequestLimits.ContainsKey(requestType))
|
|
||||||
{
|
|
||||||
return new RequestResult(HttpStatusCode.NotAcceptable, null, Stream.Null);
|
|
||||||
}
|
|
||||||
|
|
||||||
int rateLimit = Tranga.Settings.UserAgent == TrangaSettings.DefaultUserAgent
|
|
||||||
? TrangaSettings.DefaultRequestLimits[requestType]
|
|
||||||
: Tranga.Settings.RequestLimits[requestType];
|
|
||||||
|
|
||||||
|
// If we don't have a RequestLimit set for a Type, use the default one
|
||||||
|
if (!Tranga.Settings.RequestLimits.ContainsKey(requestType))
|
||||||
|
requestType = RequestType.Default;
|
||||||
|
|
||||||
|
int rateLimit = Tranga.Settings.RequestLimits[requestType];
|
||||||
|
// TODO this probably needs a better check whether the useragent matches...
|
||||||
|
// If the UserAgent is the default one, do not exceed the default request-limits.
|
||||||
|
if (Tranga.Settings.UserAgent == TrangaSettings.DefaultUserAgent && rateLimit > TrangaSettings.DefaultRequestLimits[requestType])
|
||||||
|
rateLimit = TrangaSettings.DefaultRequestLimits[requestType];
|
||||||
|
|
||||||
|
// Apply the delay
|
||||||
TimeSpan timeBetweenRequests = TimeSpan.FromMinutes(1).Divide(rateLimit);
|
TimeSpan timeBetweenRequests = TimeSpan.FromMinutes(1).Divide(rateLimit);
|
||||||
DateTime now = DateTime.Now;
|
DateTime now = DateTime.Now;
|
||||||
LastExecutedRateLimit.TryAdd(requestType, now.Subtract(timeBetweenRequests));
|
LastExecutedRateLimit.TryAdd(requestType, now.Subtract(timeBetweenRequests));
|
||||||
@@ -34,11 +38,12 @@ public abstract class DownloadClient
|
|||||||
Log.Debug($"Request limit {requestType} {rateLimit}/Minute timeBetweenRequests: {timeBetweenRequests:ss'.'fffff} Timeout: {rateLimitTimeout:ss'.'fffff}");
|
Log.Debug($"Request limit {requestType} {rateLimit}/Minute timeBetweenRequests: {timeBetweenRequests:ss'.'fffff} Timeout: {rateLimitTimeout:ss'.'fffff}");
|
||||||
|
|
||||||
if (rateLimitTimeout > TimeSpan.Zero)
|
if (rateLimitTimeout > TimeSpan.Zero)
|
||||||
{
|
|
||||||
Thread.Sleep(rateLimitTimeout);
|
Thread.Sleep(rateLimitTimeout);
|
||||||
}
|
|
||||||
|
|
||||||
|
// Make the request
|
||||||
RequestResult result = MakeRequestInternal(url, referrer, clickButton);
|
RequestResult result = MakeRequestInternal(url, referrer, clickButton);
|
||||||
|
|
||||||
|
// Update the time the last request was made
|
||||||
LastExecutedRateLimit[requestType] = DateTime.UtcNow;
|
LastExecutedRateLimit[requestType] = DateTime.UtcNow;
|
||||||
Log.Debug($"Result {url}: {result}");
|
Log.Debug($"Result {url}: {result}");
|
||||||
return result;
|
return result;
|
||||||
|
Reference in New Issue
Block a user