Skip to content
/ isahc Public

The practical HTTP client that is fun to use.

License

MIT, CC-BY-4.0 licenses found

Licenses found

MIT
LICENSE
CC-BY-4.0
LICENSE-CC-BY
Notifications You must be signed in to change notification settings

sagebind/isahc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cHTTP

The practical HTTP client that is fun to use.

Build Status Crates.io Documentation License

cHTTP provides a clean and easy-to-use interface around the venerable libcurl. Here are some of the features that are currently available:

  • HTTP/2 support.
  • Connection pooling and reuse.
  • Response body streaming.
  • Request body uploading from memory or a stream.
  • Tweakable redirect policy.
  • Persistent cookies across requests.
  • TCP socket configuration.
  • Uses the future standard Rust http interface for requests and responses.

Check out the documentation for details on how to use cHTTP.

Why libcurl?

Not everything needs to be re-invented! For typical use cases, libcurl is a fantastic choice for making web requests. It's fast, reliable, well supported, and isn't going away any time soon.

It has a reputation for having an unusual API that is sometimes tricky to use, but hey, that's why this library exists.

Examples

Really simple example that spits out the response body from https://example.org:

let mut response = chttp::get("https://example.org").unwrap();
let body = response.body_mut().text().unwrap();
println!("{}", body);

Configuring a custom client:

use chttp::{http, Client, Options, RedirectPolicy};
use std::time::Duration;

let mut options = Options::default();
options.timeout = Some(Duration::from_secs(60));
options.redirect_policy = RedirectPolicy::Limit(10);
options.preferred_http_version = Some(http::Version::HTTP_2);

let client = Client::builder()
    .max_connections(Some(4))
    .options(options)
    .build();

let mut response = client.get("https://example.org").unwrap();
let body = response.body_mut().text().unwrap();
println!("{}", body);

Installation

Add this to your Cargo.toml file:

[dependencies]
chttp = "0.3"

License

This library is licensed under the MIT license. See the LICENSE file for details.