reqwest

It handles many of the things that most people just expect an HTTP client
to do for them.

Uses system-native TLS

Plain bodies, JSON, urlencoded, (TODO: multipart)

Customizable redirect policy

(TODO: Cookies)

The reqwest::Client is synchronous, making it a great fit for
applications that only require a few HTTP requests, and wish to handle
them synchronously. When hyper releases with asynchronous support,
reqwest will be updated to use it internally, but still provide a
synchronous Client, for convenience. A reqwest::async::Client will also
be added.

Making a GET request

If you plan to perform multiple requests, it is best to create a Client
and reuse it, taking advantage of keep-alive connection pooling.

Making POST requests (or setting request bodies)

There are several ways you can set the body of a request. The basic one is
by using the body() method of a RequestBuilder. This lets you set the
exact raw bytes of what the body should be. It accepts various types,
including String, Vec<u8>, and File. If you wish to pass a custom
Reader, you can use the reqwest::Body::new() constructor.