Expand description
Surf the web - HTTP client framework
Surf is a Rust HTTP client built for ease-of-use and multi-HTTP-backend flexibility. Whether it’s a quick script, or a cross-platform SDK, Surf will make it work.
- Extensible through a powerful middleware system
- Multiple HTTP back-ends that can be chosen
- Reuses connections through a configurable
Client
interface - Fully streaming requests and responses
- TLS enabled by default (native tls or rustls)
- Built on async-std (with optional tokio support)
Examples
let mut res = surf::get("https://httpbin.org/get").await?;
dbg!(res.body_string().await?);
It’s also possible to skip the intermediate Response
, and access the response type directly.
dbg!(surf::get("https://httpbin.org/get").recv_string().await?);
Both sending and receiving JSON is real easy too.
#[derive(Deserialize, Serialize)]
struct Ip {
ip: String
}
let uri = "https://httpbin.org/post";
let data = &Ip { ip: "129.0.0.1".into() };
let res = surf::post(uri).body_json(data)?.await?;
assert_eq!(res.status(), 200);
let uri = "https://api.ipify.org?format=json";
let Ip { ip } = surf::get(uri).recv_json().await?;
assert!(ip.len() > 10);
And even creating streaming proxies is no trouble at all.
let req = surf::get("https://img.fyi/q6YvNqP").await?;
let body = surf::http::Body::from_reader(req, None);
let res = surf::post("https://box.rs/upload").body(body).await?;
Setting configuration on a client is also straightforward.
use std::convert::TryInto;
use std::time::Duration;
use surf::{Client, Config};
use surf::Url;
let client: Client = Config::new()
.set_base_url(Url::parse("http://example.org")?)
.set_timeout(Some(Duration::from_secs(5)))
.try_into()?;
let mut res = client.get("/").await?;
println!("{}", res.body_string().await?);
Features
The following features are available. The default features are
curl-client
, middleware-logger
, and encoding
curl-client
(default): usecurl
(throughisahc
) as the HTTP backend.h1-client
: useasync-h1
as the HTTP backend with native TLS for HTTPS.h1-client-rustls
: useasync-h1
as the HTTP backend withrustls
for HTTPS.hyper-client
: usehyper
(hyper.rs) as the HTTP backend.wasm-client
: usewindow.fetch
as the HTTP backend.middleware-logger
(default): enables logging requests and responses using a middleware.encoding
(default): enables support for body encodings other than utf-8.
Re-exports
pub use li_http_types as http;
Modules
Middleware types
Miscellaneous utilities.
Structs
A streaming HTTP body.
An HTTP client, capable of sending
Request
s and running a middleware stack.Configuration for
surf::Client
s and their underlying HTTP clients.An error occurred while decoding a response body to a string.
The error type for HTTP operations.
An HTTP request, returns a
Response
.Request Builder
An HTTP response, returned by
Request
.A parsed URL record.
Enums
HTTP response status codes.
Traits
An abstract HTTP client.
Provides the
status
method for Result
and Option
.Functions
Construct a new
Client
, capable of sending Request
s and running a middleware stack.Perform a one-off
CONNECT
request.Perform a one-off
DELETE
request.Perform a one-off
GET
request.Perform a one-off
HEAD
request.Perform a one-off
OPTIONS
request.Perform a one-off
PATCH
request.Perform a one-off
POST
request.Perform a one-off
PUT
request.Perform a one-off
TRACE
request.Type Definitions
A specialized Result type for Surf.