Files
h2/examples/client.rs
2019-08-16 18:47:47 -07:00

57 lines
1.3 KiB
Rust

#![feature(async_await)]
use futures::future::poll_fn;
use futures::StreamExt;
use h2::client;
use http::{HeaderMap, Request};
use std::error::Error;
use tokio::net::TcpStream;
#[tokio::main]
pub async fn main() -> Result<(), Box<dyn Error>> {
let _ = env_logger::try_init();
let tcp = TcpStream::connect(&"127.0.0.1:5928".parse().unwrap()).await?;
let (mut client, h2) = client::handshake(tcp).await?;
println!("sending request");
let request = Request::builder()
.uri("https://http2.akamai.com/")
.body(())
.unwrap();
let mut trailers = HeaderMap::new();
trailers.insert("zomg", "hello".parse().unwrap());
let (response, mut stream) = client.send_request(request, false).unwrap();
// send trailers
stream.send_trailers(trailers).unwrap();
// Spawn a task to run the conn...
tokio::spawn(async move {
if let Err(e) = h2.await {
println!("GOT ERR={:?}", e);
}
});
let response = response.await?;
println!("GOT RESPONSE: {:?}", response);
// Get the body
let (_, mut body) = response.into_parts();
while let Some(chunk) = body.next().await {
println!("GOT CHUNK = {:?}", chunk?);
}
if let Some(trailers) = poll_fn(|cx| body.poll_trailers(cx)).await {
println!("GOT TRAILERS: {:?}", trailers?);
}
Ok(())
}