# HTTP client for embedded devices
[](https://github.com/drogue-iot/reqwless/actions/workflows/ci.yaml)
[](https://crates.io/crates/reqwless)
[](https://docs.rs/reqwless)
[](https://matrix.to/#/#drogue-iot:matrix.org)
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:
* A low-level `request` API which allows you to contruct HTTP requests and write them to a `embedded-io` transport.
* A higher level `client` API which uses the `embedded-nal-async` (+ optional `embedded-tls`) crates to establish TCP + TLS connections.
## example
```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.
# Minimum supported Rust version (MSRV)
`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`.