@@ -39,15 +39,15 @@ public class WebAgent : IWebAgent
39
39
public enum RateLimitMode
40
40
{
41
41
/// <summary>
42
- /// Limits requests to one every one second
42
+ /// Limits requests to one every two seconds ( one if OAuth)
43
43
/// </summary>
44
44
Pace ,
45
45
/// <summary>
46
- /// Restricts requests to ten per ten seconds
46
+ /// Restricts requests to five per ten seconds (ten if OAuth)
47
47
/// </summary>
48
48
SmallBurst ,
49
49
/// <summary>
50
- /// Restricts requests to sixty per minute
50
+ /// Restricts requests to thirty per minute (sixty if OAuth)
51
51
/// </summary>
52
52
Burst ,
53
53
/// <summary>
@@ -171,10 +171,11 @@ public virtual JToken ExecuteRequest(HttpWebRequest request)
171
171
[ MethodImpl ( MethodImplOptions . Synchronized ) ]
172
172
protected virtual void EnforceRateLimit ( )
173
173
{
174
+ var limitRequestsPerMinute = IsOAuth ( ) ? 60.0 : 30.0 ;
174
175
switch ( RateLimit )
175
176
{
176
177
case RateLimitMode . Pace :
177
- while ( ( DateTime . UtcNow - _lastRequest ) . TotalSeconds < 1 ) // Rate limiting
178
+ while ( ( DateTime . UtcNow - _lastRequest ) . TotalSeconds < 60.0 / limitRequestsPerMinute ) // Rate limiting
178
179
Thread . Sleep ( 250 ) ;
179
180
_lastRequest = DateTime . UtcNow ;
180
181
break ;
@@ -184,7 +185,7 @@ protected virtual void EnforceRateLimit()
184
185
_burstStart = DateTime . UtcNow ;
185
186
_requestsThisBurst = 0 ;
186
187
}
187
- if ( _requestsThisBurst >= 10 ) //limit has been reached
188
+ if ( _requestsThisBurst >= limitRequestsPerMinute / 6.0 ) //limit has been reached
188
189
{
189
190
while ( ( DateTime . UtcNow - _burstStart ) . TotalSeconds < 10 )
190
191
Thread . Sleep ( 250 ) ;
@@ -200,7 +201,7 @@ protected virtual void EnforceRateLimit()
200
201
_burstStart = DateTime . UtcNow ;
201
202
_requestsThisBurst = 0 ;
202
203
}
203
- if ( _requestsThisBurst >= 60 ) //limit has been reached
204
+ if ( _requestsThisBurst >= limitRequestsPerMinute ) //limit has been reached
204
205
{
205
206
while ( ( DateTime . UtcNow - _burstStart ) . TotalSeconds < 60 )
206
207
Thread . Sleep ( 250 ) ;
@@ -234,7 +235,7 @@ public virtual HttpWebRequest CreateRequest(string url, string method)
234
235
var cookieHeader = Cookies . GetCookieHeader ( new Uri ( "http://reddit.com" ) ) ;
235
236
request . Headers . Set ( "Cookie" , cookieHeader ) ;
236
237
}
237
- if ( RootDomain == "oauth.reddit.com" ) // use OAuth
238
+ if ( IsOAuth ( ) ) // use OAuth
238
239
{
239
240
request . Headers . Set ( "Authorization" , "bearer " + AccessToken ) ; //Must be included in OAuth calls
240
241
}
@@ -253,7 +254,7 @@ protected virtual HttpWebRequest CreateRequest(Uri uri, string method)
253
254
var cookieHeader = Cookies . GetCookieHeader ( new Uri ( "http://reddit.com" ) ) ;
254
255
request . Headers . Set ( "Cookie" , cookieHeader ) ;
255
256
}
256
- if ( RootDomain == "oauth.reddit.com" ) // use OAuth
257
+ if ( IsOAuth ( ) ) // use OAuth
257
258
{
258
259
request . Headers . Set ( "Authorization" , "bearer " + AccessToken ) ; //Must be included in OAuth calls
259
260
}
@@ -308,5 +309,10 @@ public virtual void WritePostBody(Stream stream, object data, params string[] ad
308
309
stream . Write ( raw , 0 , raw . Length ) ;
309
310
stream . Close ( ) ;
310
311
}
312
+
313
+ private static bool IsOAuth ( )
314
+ {
315
+ return RootDomain == "oauth.reddit.com" ;
316
+ }
311
317
}
312
318
}
0 commit comments