Arios is a small HTTP client crate written in Rust.
The project started as a study exercise and is being refactored into a publishable library crate. The current focus is on manual HTTP request/response handling, response metadata parsing, and a small public API.
Arios currently supports:
GET,POST,PUT,PATCH,DELETE,HEAD, andOPTIONS- HTTP and HTTPS
- HTTPS backed by
rustlswith native platform root certificates - configurable
AcceptandContent-Typeheaders - response metadata such as status code, content-type, charset, and content-length
- access to raw response bytes
- text decoding with built-in support for UTF-8, ISO-8859-1, and US-ASCII
- UTF-8 fallback when no charset is provided or when the charset is not supported
- explicit
AriosError::HttpStatuserrors for4xxand5xxresponses
Current limitations:
- the API is still evolving
- URL parsing is intentionally simple
- advanced HTTP features are still limited
HEADresponses are represented with an empty response body- HTTPS depends on the operating system certificate store being available
Add the crate to your Cargo.toml:
[dependencies]
arios = "0.2.2"use arios::{Arios, AriosResult, ContentType};
fn main() -> AriosResult<()> {
let arios = Arios::create("https://httpbin.org/get")?;
let response = arios.get(ContentType::Json)?;
println!("{}", response.text()?);
Ok(())
}See also: examples/basic_get.rs
use arios::{Arios, AriosResult, ContentType};
fn main() -> AriosResult<()> {
let arios = Arios::create("https://httpbin.org/post")?;
let body = r#"{"name":"arios"}"#;
let response = arios.post(body, ContentType::Json, ContentType::Json)?;
println!("{}", response.text()?);
Ok(())
}See also: examples/basic_post.rs
Arios also exposes:
head()for header-only requestsoptions()for capability and method discoveryput()andpatch()for body-carrying updatesdelete()for resource deletion requests
head() returns an AriosResponse with an empty body. Calls that receive 4xx
or 5xx statuses return AriosError::HttpStatus instead of a successful
response value.
AriosResponse exposes:
bytes()for raw response bytestext()for decoded textual content- public metadata fields such as
code,status,content_type,charset, andcontent_length
text() currently supports utf-8, iso-8859-1, and us-ascii. If the response does not declare a charset, or declares one that Arios does not support yet, decoding falls back to UTF-8.