The reqwless
crate implements an HTTP client that can be used in no_std
environment, with any transport that implements the
traits from the embedded-io
crate. No alloc or std lib required!
It offers two sets of APIs:
request
API which allows you to contruct HTTP requests and write them to a embedded-io
transport.client
API which uses the embedded-nal-async
(+ optional embedded-tls
) crates to establish TCP + TLS connections.rust,ignore
let url = format!("http://localhost", addr.port());
let mut client = HttpClient::new(TokioTcp, StaticDns); // Types implementing embedded-nal-async
let mut rx_buf = [0; 4096];
let response = client
.request(Method::POST, &url)
.await
.unwrap()
.body(b"PING")
.content_type(ContentType::TextPlain)
.send(&mut rx_buf)
.await
.unwrap();
The client is still lacking many features, but can perform basic HTTP GET/PUT/POST/DELETE requests with payloads. However, not all content types and status codes are implemented, and are added on a need basis. For TLS, you can use embedded-tls
as the transport.
If you are missing a feature or would like an improvement, please raise an issue or a PR.
reqwless
requires a feature from nightly
to compile embedded-io
with async support:
type_alias_impl_trait
This feature is complete, but is not yet merged to stable
.