1 unstable release
0.1.0 | Nov 24, 2019 |
---|
#477 in HTTP client
128 downloads per month
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
~4–17MB
~249K SLoC