Expand description
Lower-level client connection API.
The types in this module are to provide a lower-level API based around a single connection. Connecting to a host, pooling connections, and the like are not handled at this level. This module provides the building blocks to customize those things externally.
If you are looking for a convenient HTTP client,
then you may wish to consider reqwest
for a high level client or hyper-util
’s client
if you want to keep it more low level / basic.
§Example
A simple example that uses the SendRequest
struct to talk HTTP over some TCP stream.
use bytes::Bytes;
use http::{Request, StatusCode};
use http_body_util::Empty;
use hyper::client::conn;
let (mut request_sender, connection) = conn::http1::handshake(tcp).await?;
// spawn a task to poll the connection and drive the HTTP state
tokio::spawn(async move {
if let Err(e) = connection.await {
eprintln!("Error in connection: {}", e);
}
});
let request = Request::builder()
// We need to manually add the host header because SendRequest does not
.header("Host", "example.com")
.method("GET")
.body(Empty::<Bytes>::new())?;
let response = request_sender.send_request(request).await?;
assert!(response.status() == StatusCode::OK);
let request = Request::builder()
.header("Host", "example.com")
.method("GET")
.body(Empty::<Bytes>::new())?;
let response = request_sender.send_request(request).await?;
assert!(response.status() == StatusCode::OK);
Modules§
- HTTP/1 client connections
- HTTP/2 client connections