40 lines
1017 B
Rust
40 lines
1017 B
Rust
// #![warn(rust_2018_idioms)]
|
|
|
|
use native_tls::TlsConnector;
|
|
use std::error::Error;
|
|
use std::net::ToSocketAddrs;
|
|
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
|
use tokio::net::TcpStream;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
|
let addr = "www.rust-lang.org:443"
|
|
.to_socket_addrs()?
|
|
.next()
|
|
.ok_or("failed to resolve www.rust-lang.org")?;
|
|
|
|
let socket = TcpStream::connect(&addr).await?;
|
|
let cx = TlsConnector::builder().build()?;
|
|
let cx = tokio_native_tls::TlsConnector::from(cx);
|
|
|
|
let mut socket = cx.connect("www.rust-lang.org", socket).await?;
|
|
|
|
socket
|
|
.write_all(
|
|
"\
|
|
GET / HTTP/1.0\r\n\
|
|
Host: www.rust-lang.org\r\n\
|
|
\r\n\
|
|
"
|
|
.as_bytes(),
|
|
)
|
|
.await?;
|
|
|
|
let mut data = Vec::new();
|
|
socket.read_to_end(&mut data).await?;
|
|
|
|
// println!("data: {:?}", &data);
|
|
println!("{}", String::from_utf8_lossy(&data[..]));
|
|
Ok(())
|
|
}
|