Crates.io | areq |
lib.rs | areq |
version | 0.1.0-alpha5 |
created_at | 2024-11-05 01:16:26.656507+00 |
updated_at | 2025-08-29 20:17:20.46841+00 |
description | Async runtime-agnostic HTTP requests |
homepage | |
repository | https://github.com/nanoqsh/areq |
max_upload_size | |
id | 1435887 |
size | 70,740 |
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.
Although the library is runtime-agnostic, 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 runtimeAs 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:
use {
areq_tokio::{areq::{http::Uri, http1::Http1}, prelude::*},
std::io::Error,
};
async fn get() -> Result<String, Error> {
let uri = Uri::from_static("http://127.0.0.1:3001/hello");
let (mut client, conn) = Http1::default().connect(&uri).await?;
tokio::spawn(conn);
client.get(uri, ()).await?.text().await
}
fn main() {
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}"),
}
}