3 releases
Uses new Rust 2024
new 0.1.0-alpha3 | Mar 12, 2025 |
---|---|
0.1.0-alpha2 | Feb 17, 2025 |
0.1.0-alpha | Nov 5, 2024 |
#122 in HTTP client
159 downloads per month
Used in 2 crates
73KB
2K
SLoC
Development
🚧 The library is currently under development 🚧
Many features require an unstable Rust feature – return type notation. The main crate areq
has the rtn
feature, which enables the missing functionality. High-level crates areq-smol
and areq-tokio
require this feature for compilation, so to use the library you need to install nightly compiler. Once the RTN feature is stabilized, the library will be usable on stable.
Features
- Async only, no hidden overhead from blocking API
- Independent of any async runtime, including features. Instead, the runtime extends the functionality of the base crate
- Zero-cost abstractions for a flexible solution and an ability to choose a simple API when needed
- Modular and configurable – build exactly the HTTP client you need
Getting Started
Although the library is runtime-independent, it also provides high-level crates for choosing a specific runtime. Currently, two crates are available:
areq-smol
provides support for the smol runtimeareq-tokio
provides support for the tokio runtime
As an example, let's use tokio and add the crate to a project. You also need to select an HTTP protocol version that the client will support. For this example, let's use HTTP/1.1 which can be enabled with the http1
cargo feature:
cargo add areq-tokio -F http1
Now you can make a GET request and read a response body:
fn main() {
use {
areq_tokio::{areq::{http::Uri, http1::Http1}, prelude::*},
std::io::Error,
};
async fn get() -> Result<String, Error> {
let addr = Uri::from_static("http://127.0.0.1:3001");
let (mut client, conn) = Http1::default().connect(addr).await?;
tokio::spawn(conn);
let path = Uri::from_static("/hello");
client.get(path).await?.text().await
}
let rt = tokio::runtime::Runtime::new();
match rt.and_then(|rt| rt.block_on(get())) {
Ok(text) => println!("{text}"),
Err(e) => eprintln!("io error: {e}"),
}
}
Dependencies
~3–14MB
~174K SLoC