Module hyper::client::conn

source ·
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