Module: HTTPX::Plugins::RateLimiter
- Defined in:
- lib/httpx/plugins/rate_limiter.rb
Overview
This plugin adds support for retrying requests when the request:
-
is rate limited;
-
when the server is unavailable (503);
-
when a 3xx request comes with a “retry-after” value
Constant Summary collapse
- RATE_LIMIT_CODES =
[429, 503].freeze
Class Method Summary collapse
- .configure(klass) ⇒ Object
-
.retry_after_rate_limit(_, response) ⇒ Object
Servers send the “Retry-After” header field to indicate how long the user agent ought to wait before making a follow-up request.
- .retry_on_rate_limited_response(response) ⇒ Object
Class Method Details
.configure(klass) ⇒ Object
18 19 20 21 22 23 |
# File 'lib/httpx/plugins/rate_limiter.rb', line 18 def configure(klass) klass.plugin(:retries, retry_change_requests: true, retry_on: method(:retry_on_rate_limited_response), retry_after: method(:retry_after_rate_limit)) end |
.retry_after_rate_limit(_, response) ⇒ Object
Servers send the “Retry-After” header field to indicate how long the user agent ought to wait before making a follow-up request. When sent with a 503 (Service Unavailable) response, Retry-After indicates how long the service is expected to be unavailable to the client. When sent with any 3xx (Redirection) response, Retry-After indicates the minimum time that the user agent is asked to wait before issuing the redirected request.
41 42 43 44 45 46 47 48 49 |
# File 'lib/httpx/plugins/rate_limiter.rb', line 41 def retry_after_rate_limit(_, response) return unless response.is_a?(Response) retry_after = response.headers["retry-after"] return unless retry_after Utils.parse_retry_after(retry_after) end |
.retry_on_rate_limited_response(response) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/httpx/plugins/rate_limiter.rb', line 25 def retry_on_rate_limited_response(response) return false unless response.is_a?(Response) status = response.status RATE_LIMIT_CODES.include?(status) end |