Skip to content

Commit 1d19046

Browse files
committed
Change rate limiting to be based on OAuth check
Change rate limiting to be based on OAuth check
1 parent 47c1724 commit 1d19046

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

RedditSharp/WebAgent.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,15 @@ public class WebAgent : IWebAgent
3939
public enum RateLimitMode
4040
{
4141
/// <summary>
42-
/// Limits requests to one every one second
42+
/// Limits requests to one every two seconds (one if OAuth)
4343
/// </summary>
4444
Pace,
4545
/// <summary>
46-
/// Restricts requests to ten per ten seconds
46+
/// Restricts requests to five per ten seconds (ten if OAuth)
4747
/// </summary>
4848
SmallBurst,
4949
/// <summary>
50-
/// Restricts requests to sixty per minute
50+
/// Restricts requests to thirty per minute (sixty if OAuth)
5151
/// </summary>
5252
Burst,
5353
/// <summary>
@@ -171,10 +171,11 @@ public virtual JToken ExecuteRequest(HttpWebRequest request)
171171
[MethodImpl(MethodImplOptions.Synchronized)]
172172
protected virtual void EnforceRateLimit()
173173
{
174+
var limitRequestsPerMinute = IsOAuth() ? 60.0 : 30.0;
174175
switch (RateLimit)
175176
{
176177
case RateLimitMode.Pace:
177-
while ((DateTime.UtcNow - _lastRequest).TotalSeconds < 1)// Rate limiting
178+
while ((DateTime.UtcNow - _lastRequest).TotalSeconds < 60.0/limitRequestsPerMinute)// Rate limiting
178179
Thread.Sleep(250);
179180
_lastRequest = DateTime.UtcNow;
180181
break;
@@ -184,7 +185,7 @@ protected virtual void EnforceRateLimit()
184185
_burstStart = DateTime.UtcNow;
185186
_requestsThisBurst = 0;
186187
}
187-
if (_requestsThisBurst >= 10) //limit has been reached
188+
if (_requestsThisBurst >= limitRequestsPerMinute / 6.0) //limit has been reached
188189
{
189190
while ((DateTime.UtcNow - _burstStart).TotalSeconds < 10)
190191
Thread.Sleep(250);
@@ -200,7 +201,7 @@ protected virtual void EnforceRateLimit()
200201
_burstStart = DateTime.UtcNow;
201202
_requestsThisBurst = 0;
202203
}
203-
if (_requestsThisBurst >= 60) //limit has been reached
204+
if (_requestsThisBurst >= limitRequestsPerMinute) //limit has been reached
204205
{
205206
while ((DateTime.UtcNow - _burstStart).TotalSeconds < 60)
206207
Thread.Sleep(250);
@@ -234,7 +235,7 @@ public virtual HttpWebRequest CreateRequest(string url, string method)
234235
var cookieHeader = Cookies.GetCookieHeader(new Uri("http://reddit.com"));
235236
request.Headers.Set("Cookie", cookieHeader);
236237
}
237-
if (RootDomain == "oauth.reddit.com")// use OAuth
238+
if (IsOAuth())// use OAuth
238239
{
239240
request.Headers.Set("Authorization", "bearer " + AccessToken);//Must be included in OAuth calls
240241
}
@@ -253,7 +254,7 @@ protected virtual HttpWebRequest CreateRequest(Uri uri, string method)
253254
var cookieHeader = Cookies.GetCookieHeader(new Uri("http://reddit.com"));
254255
request.Headers.Set("Cookie", cookieHeader);
255256
}
256-
if (RootDomain == "oauth.reddit.com")// use OAuth
257+
if (IsOAuth())// use OAuth
257258
{
258259
request.Headers.Set("Authorization", "bearer " + AccessToken);//Must be included in OAuth calls
259260
}
@@ -308,5 +309,10 @@ public virtual void WritePostBody(Stream stream, object data, params string[] ad
308309
stream.Write(raw, 0, raw.Length);
309310
stream.Close();
310311
}
312+
313+
private static bool IsOAuth()
314+
{
315+
return RootDomain == "oauth.reddit.com";
316+
}
311317
}
312318
}

0 commit comments

Comments
 (0)