#rate-limiting #http-request #http-middleware

reqwest-leaky-bucket

Leaky-bucket rate limit middleware for reqwest

3 releases (breaking)

0.3.0 Jan 9, 2025
0.2.0 May 19, 2024
0.1.0 Sep 29, 2023

#128 in HTTP client

Download history 612/week @ 2024-12-17 164/week @ 2024-12-24 357/week @ 2024-12-31 878/week @ 2025-01-07 1176/week @ 2025-01-14 795/week @ 2025-01-21 1281/week @ 2025-01-28 1116/week @ 2025-02-04 1391/week @ 2025-02-11 1698/week @ 2025-02-18 1547/week @ 2025-02-25 1746/week @ 2025-03-04 1584/week @ 2025-03-11 1685/week @ 2025-03-18 1819/week @ 2025-03-25 2008/week @ 2025-04-01

7,412 downloads per month

MIT license

5KB

Middleware to rate-limit requests built on reqwest_middleware, reqwest_ratelimit and leaky_bucket.

Provides a reqwest_ratelimit::RateLimiter adapter for leaky_bucket::RateLimiter.

Example

use async_trait::async_trait;
use reqwest_leaky_bucket::leaky_bucket::RateLimiter;
use reqwest_middleware::{ClientBuilder, ClientWithMiddleware};

async fn run() {
    let limiter = RateLimiter::builder().max(10).initial(0).refill(5).build();

    let client = ClientBuilder::new(reqwest::Client::new())
        .with(reqwest_leaky_bucket::rate_limit_all(limiter))
        .build();

    client.get("https://crates.io").send().await.unwrap();
}

reqwest-leaky-bucket

leaky-bucket rate-limit middleware implementation for reqwest-middleware based on reqwest-ratelimit.

Crates.io Docs.rs

Usage

use async_trait::async_trait;
use reqwest_leaky_bucket::leaky_bucket::RateLimiter;
use reqwest_middleware::{ClientBuilder, ClientWithMiddleware};

async fn run() {
    let limiter = RateLimiter::builder().max(10).initial(0).refill(5).build();
    let client = ClientBuilder::new(reqwest::Client::new())
        .with(reqwest_leaky_bucket::rate_limit_all(limiter))
        .build();
    client.get("https://crates.io").send().await.unwrap();
}

Dependencies

~6–18MB
~230K SLoC