#http-request #http #buffer #reader #replace

http-range-client

HTTP client for HTTP Range requests with a buffer optimized for sequential requests

6 releases (3 breaking)

0.9.0 Dec 21, 2024
0.8.0 Aug 12, 2024
0.7.2 Sep 10, 2023
0.7.0 Aug 31, 2023
0.6.0 Nov 10, 2021

#101 in HTTP client

Download history 151/week @ 2024-11-26 300/week @ 2024-12-03 397/week @ 2024-12-10 350/week @ 2024-12-17 34/week @ 2024-12-24 142/week @ 2024-12-31 241/week @ 2025-01-07 290/week @ 2025-01-14 221/week @ 2025-01-21 377/week @ 2025-01-28 211/week @ 2025-02-04 468/week @ 2025-02-11 456/week @ 2025-02-18 317/week @ 2025-02-25 180/week @ 2025-03-04 304/week @ 2025-03-11

1,369 downloads per month
Used in 4 crates

MIT/Apache

35KB
647 lines

http-range-client

CI build crates.io version docs.rs docs

HTTP client for HTTP Range requests with a buffer optimized for sequential reading.

Implements Seek+Read for blocking clients, which makes it a drop-in replacement for local files.

Usage examples

use http_range_client::*;

let mut client = BufferedHttpRangeClient::new("https://flatgeobuf.org/test/data/countries.fgb");
let bytes = client.min_req_size(256).get_range(0, 3).await?;
assert_eq!(bytes, b"fgb");
let version = client.get_bytes(1).await?; // From buffer - no HTTP request!
assert_eq!(version, [3]);

let mut reader = HttpReader::new("https://www.rust-lang.org/static/images/favicon-32x32.png");
reader.seek(SeekFrom::Start(1)).ok();
let mut bytes = [0; 3];
reader.read_exact(&mut bytes)?;
assert_eq!(&bytes, b"PNG");

Supported HTTP clients (feature flag)

  • reqwest async (reqwest-async, default)
  • reqwest blocking (reqwest-sync, default): Not supported on Wasm target
  • ureq blocking (ureq-sync): Not supported on Wasm target

Other clients can be used via the AsyncBufferedHttpRangeClient resp. SyncBufferedHttpRangeClient adapter, after implementing the AsyncHttpRangeClient resp. SyncHttpRangeClient trait.

Dependencies

~0.5–14MB
~195K SLoC