pub async fn h2c_head_request(port: u16, path: &str) -> (http::StatusCode, Option<String>, usize) {
let tcp = tokio::net::TcpStream::connect(("127.0.0.1", port))
.await
.unwrap();
let (mut client, connection) = h2::client::handshake(tcp).await.unwrap();
tokio::spawn(connection);
let request = http::Request::builder()
.method("HEAD")
.uri(path)
.body(())
.unwrap();
let (response_fut, _send_stream) = client.send_request(request, true).unwrap();
let response = response_fut.await.unwrap();
let status = response.status();
let content_length = response
.headers()
.get(http::header::CONTENT_LENGTH)
.map(|v| v.to_str().unwrap().to_string());
let mut body = response.into_body();
let mut received = 0usize;
while let Some(chunk) = body.data().await {
received += chunk.unwrap().len();
}
(status, content_length, received)
}