1 unstable release

0.1.0 Nov 24, 2019

#847 in #http

Download history 69/week @ 2023-10-28 52/week @ 2023-11-04 41/week @ 2023-11-11 51/week @ 2023-11-18 61/week @ 2023-11-25 33/week @ 2023-12-02 48/week @ 2023-12-09 51/week @ 2023-12-16 39/week @ 2023-12-23 22/week @ 2023-12-30 57/week @ 2024-01-06 55/week @ 2024-01-13 38/week @ 2024-01-20 45/week @ 2024-01-27 35/week @ 2024-02-03 60/week @ 2024-02-10

193 downloads per month

MIT license

150KB
3.5K SLoC

rttp_client

rttp_client

Additional features

rttp_client is a minimal http client, the default features only support http request, but you can add features to support https request, and async support

name comment
async Async request features
tls-native support https request use native-tls crate
tls-rustls support https request use rustls crate

The default use

[dependencies]
rttp_client = "0.1"

With tls-native

[dependencies]
rttp_client = { version = "0.1", features = ["tls-native"] }

With tls-rustls

[dependencies]
rttp_client = { version = "0.1", features = ["tls-rustls"] }

Async support

[dependencies]
rttp_client = { version = "0.1", features = ["async"] }

Full support

[dependencies]
rttp_client = { version = "0.1", features = ["async", "tls-native"] }

Important tls-native and tls-rustls only support choose on features, do not same to use.

Examples

GET

# use rttp_client::HttpClient;
HttpClient::new().get()
  .url("http://httpbin.org/get")
  .emit();

POST

# use rttp_client::HttpClient;
HttpClient::new().post()
  .url("http://httpbin.org/post")
  .emit();

Header

# use rttp_client::HttpClient;
# use rttp_client::types::Header;
# use std::collections::HashMap;
let mut multi_headers = HashMap::new();
multi_headers.insert("name", "value");
HttpClient::new().get()
 .url("http://httpbin.org/get")
 .header("name=value&name=value")
 .header(("name", "value", "name=value&name=value"))
 .header(Header::new("name", "value"))
 .header(multi_headers)
 .emit();

Para

# use rttp_client::HttpClient;
# use rttp_client::types::Para;
# use std::collections::HashMap;
let mut multi_para = HashMap::new();
multi_para.insert("name", "value");
HttpClient::new().post()
  .url("http://httpbin.org/post")
  .para("name=value&name=value")
  .para(("name", "value", "name=value&name=value"))
  .para(Para::new("name", "value"))
  .para(multi_para)
  .emit();

Url

# use rttp_client::HttpClient;
# use rttp_client::types::RoUrl;
HttpClient::new().get()
  .url(RoUrl::with("http://httpbin.org").path("get").para("name=value").para(("from", "rttp")))
  .emit();

POST JSON

# use rttp_client::HttpClient;
HttpClient::new().post()
  .url("http://httpbin.org/post")
  .content_type("application/json")
  .raw(r#" {"id": 1, "from": "rttp"} "#)
  .emit();

Form && Upload file

# use rttp_client::HttpClient;
# use rttp_client::types::FormData;
# use std::collections::HashMap;
let mut multi_form = HashMap::new();
multi_form.insert("name", "value");
HttpClient::new().post()
  .url("http://httpbin.org/post")
  .para("name=value")
  .form("name=value")
  .form("name=value&name=value")
  .form(("name", "value", "name=value&name=value"))
  .form("file=@filename#/path/to/file")
  .form("file=@/path/to/file")
  .form(multi_form)
  .form(FormData::with_text("name", "value"))
  .form(FormData::with_file("name", "/path/to/file"))
  .form(FormData::with_file_and_name("name", "/path/to/file", "filename"))
  .form(FormData::with_binary("name", vec![]))  // Vec<u8>
  .emit();

Para and form can be mixed, para does not support file parsing

Proxy

BASIC

# use rttp_client::HttpClient;
# use rttp_client::types::Proxy;
HttpClient::new().post()
  .url("http://httpbin.org/post")
  .content_type("application/json")
  .raw(r#" {"id": 1, "from": "rttp"} "#)
  .proxy(Proxy::http("127.0.0.1", 1081))
  .emit();

BASIC WITH AUTHORIZATION

# use rttp_client::HttpClient;
# use rttp_client::types::Proxy;
HttpClient::new().post()
  .url("http://httpbin.org/post")
  .content_type("application/json")
  .raw(r#" {"id": 1, "from": "rttp"} "#)
  .proxy(Proxy::socks5_with_authorization("127.0.0.1", 1081, "username", "password"))
  .emit();

Auto redirect

# use rttp_client::HttpClient;
# use rttp_client::Config;
let response = HttpClient::new().post()
  .config(Config::builder().auto_redirect(true))
  .get()
  .url("http://bing.com")
  .emit();
assert!(response.is_ok());
let response = response.unwrap();
assert_ne!("bing.com", response.host());

Async

# use rttp_client::HttpClient;
# #[cfg(feature = "async")]
let response = HttpClient::new().post()
  .url("http://httpbin.org/post")
  .rasync()
  .await;

Dependencies

~3–17MB
~255K SLoC