use ntex::client::{Client, ClientConfig, error::ClientError};
use ntex::{SharedCfg, error::Error, time::Seconds};
use tls_openssl::ssl::{self, SslMethod, SslVerifyMode};
#[ntex::main]
async fn main() -> Result<(), Error<ClientError>> {
env_logger::init();
println!("Connecting to openssl webserver: 127.0.0.1:8443");
let mut builder = ssl::SslConnector::builder(SslMethod::tls()).unwrap();
builder.set_verify(SslVerifyMode::NONE);
builder.set_alpn_select_callback(|_, protos| {
const H2: &[u8] = b"\x02h2";
if protos.windows(3).any(|window| window == H2) {
Ok(b"h2")
} else {
Err(ssl::AlpnError::NOACK)
}
});
builder.set_alpn_protos(b"\x02h2").unwrap();
let client = Client::builder()
.openssl(builder.build())
.build(SharedCfg::new("H").add(ClientConfig::new().set_response_timeout(Seconds(5))));
let response = client
.get("https://127.0.0.1:8443/")
.header("User-Agent", "ntex")
.send()
.await?;
println!("Response: {:?}", response);
let body = response.body().await.unwrap();
println!("Downloaded: {:?} bytes", body.len());
Ok(())
}