37 releases (16 breaking)
0.18.0 | Jun 7, 2023 |
---|---|
0.16.0 | Mar 29, 2023 |
0.10.0 | Dec 15, 2022 |
0.9.0 | Nov 14, 2022 |
0.1.12 | Mar 31, 2022 |
#56 in HTTP client
653 downloads per month
Used in 24 crates
68KB
1.5K
SLoC
HttpClient
httpclient
is a user-friendly http client in Rust. Where possible, it closely mimics the reqwest
API. Why build a
new http client?
httpclient::{Request, Response}
objects are serde-serializable, which enables record/replay functionality. See the example below to see it in action.httpclient
provides an API for user-extensible middleware. Built-in middleware includes redirect, retry, logging, and record/replay.httpclient
provides a built-inError
type that can return the Http request, which includes the status code, headers, and response body.httpclient
provides convenience methods thatreqwest
does not support. The most important issend_awaiting_body
which awaits both the request and the response body, which greatly simplifies the scenario where you want to return the request body even in error cases.
Note:
httpclient
is under active development and is alpha quality software. While we make effort not to change public APIs, we do not currently provide stability guarantees.
Examples
#[tokio::main]
async fn main() {
let mut client = httpclient::Client::new()
// With this middleware, the script will only make the request once. After that, it replays from the filesystem
// and does not hit the remote server. The middleware has different modes to ignore recordings (to force refresh)
// and to prevent new requests (for running a test suite).
// The recordings are sanitized to hide secrets.
.with_middleware(httpclient::middleware::RecorderMiddleware::new())
;
let res = client.get("https://www.jsonip.com/")
.header("secret", "foo")
.await
.unwrap();
// Note the default API (identical to reqwest) requires `await`ing the response body.
let res = res.text().await.unwrap();
let res = client.get("https://www.jsonip.com/")
.header("secret", "foo")
.send_awaiting_body()
.await
.unwrap();
// By using `send_awaiting_body`, the response is loaded into memory, and we don't have to `await` it.
let res = res.text().unwrap();
}
Roadmap
- Hide secrets in Recorder. Hash & Eq checks for requests must respect hidden values.
- Ensure it builds on wasm32-unknown-unknown
- Sanitize "sessid" in json
Dependencies
~9–20MB
~336K SLoC