ratmom 0.1.0

Sensible, async, curl-based HTTP client
# ratmom

this is ratmom, a [libcurl]-based http client for rust that makes sense.

_a fork of [isahc]._

[![Crates.io](https://img.shields.io/crates/v/ratmom.svg)](https://crates.io/crates/ratmom)
[![Documentation](https://docs.rs/ratmom/badge.svg)][documentation]
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![Crates.io downloads](https://img.shields.io/crates/d/ratmom)](https://crates.io/crates/ratmom)
![Maintenance](https://img.shields.io/badge/maintenance-actively--developed-brightgreen.svg)
[![Build](https://ci.codeberg.org/api/badges/transcast/ratmom/status.svg)](https://ci.codeberg.org/transcast/ratmom)

## differences from isahc (TODO)

-   no more synchronous API
-   fuck [http] crate
-   [url] crate used for url like everywhere else
-   [ratcurl], our fork of the [curl crate] used
-   curl-impersonate support

## unchanged key features

-   full support for HTTP/1.1 and HTTP/2.
-   configurable request timeouts, redirect policies, Unix sockets, and many more settings.
-   a runtime-agnostic asynchronous API with support for [async/await].
-   fully asynchronous core, with incremental reading and writing of request and response bodies and connection multiplexing.
-   sessions and cookie persistence.
-   automatic request cancellation on drop.

## [documentation]

please check out the [documentation] for details on what ratmom can do and how to use it. to get you started, here is a really simple, complete example that spits out the response body from https://example.org:

```rust
use ratmom::prelude::*;

fn main() -> Result<(), ratmom::Error> {
    // Send a GET request and wait for the response headers.
    // Must be `mut` so we can read the response body.
    let mut response = ratmom::get("https://example.org")?;

    // Print some basic info about the response to standard output.
    println!("Status: {}", response.status());
    println!("Headers: {:#?}", response.headers());

    // Read the response body as text into a string and print it.
    print!("{}", response.text()?);

    Ok(())
}
```

click [here][documentation] for documentation on the latest version.

## getting help

need some help with something ratmom-related? ask a question on our [issues page][issues], where we are happy to try and answer your questions!

## installation

install via cargo by adding to your `Cargo.toml` file:

```toml
[dependencies]
ratmom = "0.1"
```

or simply:

```
cargo add ratmom
```

## license

this project's source code and documentation are licensed under the MIT license. see the [LICENSE](LICENSE) file for details.

[async/await]: https://rust-lang.github.io/async-book/01_getting_started/04_async_await_primer.html
[curl crate]: https://crates.io/crates/curl
[documentation]: https://docs.rs/ratmom
[http]: https://github.com/hyperium/http
[isahc]: https://github.com/sagebind/isahc
[issues]: https://codeberg.org/transcast/ratmom/issues
[libcurl]: https://curl.haxx.se/libcurl/
[ratcurl]: https://codeberg.org/transcast/ratcurl
[url]: https://crates.io/crates/url