2019-08-10 00:07:57 +09:00
|
|
|
// #![warn(rust_2018_idioms)]
|
2018-08-08 08:36:17 -07:00
|
|
|
|
|
|
|
|
use native_tls::TlsConnector;
|
2019-07-16 18:26:08 +01:00
|
|
|
use std::error::Error;
|
2019-05-14 10:27:36 -07:00
|
|
|
use std::net::ToSocketAddrs;
|
2019-07-16 18:26:08 +01:00
|
|
|
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
2018-08-08 08:36:17 -07:00
|
|
|
use tokio::net::TcpStream;
|
2019-05-14 10:27:36 -07:00
|
|
|
use tokio_tls;
|
2018-08-08 08:36:17 -07:00
|
|
|
|
2019-07-16 18:26:08 +01:00
|
|
|
#[tokio::main]
|
|
|
|
|
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
2019-02-21 11:56:15 -08:00
|
|
|
let addr = "www.rust-lang.org:443"
|
|
|
|
|
.to_socket_addrs()?
|
|
|
|
|
.next()
|
|
|
|
|
.ok_or("failed to resolve www.rust-lang.org")?;
|
2018-08-08 08:36:17 -07:00
|
|
|
|
2019-07-16 18:26:08 +01:00
|
|
|
let socket = TcpStream::connect(&addr).await?;
|
2018-11-20 18:10:36 +02:00
|
|
|
let cx = TlsConnector::builder().build()?;
|
2018-08-08 08:36:17 -07:00
|
|
|
let cx = tokio_tls::TlsConnector::from(cx);
|
|
|
|
|
|
2019-07-16 18:26:08 +01:00
|
|
|
let mut socket = cx.connect("www.rust-lang.org", socket).await?;
|
|
|
|
|
|
|
|
|
|
socket
|
|
|
|
|
.write_all(
|
2019-02-21 11:56:15 -08:00
|
|
|
"\
|
|
|
|
|
GET / HTTP/1.0\r\n\
|
|
|
|
|
Host: www.rust-lang.org\r\n\
|
|
|
|
|
\r\n\
|
|
|
|
|
"
|
|
|
|
|
.as_bytes(),
|
|
|
|
|
)
|
2019-07-16 18:26:08 +01:00
|
|
|
.await?;
|
|
|
|
|
|
|
|
|
|
let mut data = Vec::new();
|
|
|
|
|
socket.read_to_end(&mut data).await?;
|
2018-08-08 08:36:17 -07:00
|
|
|
|
2019-07-16 18:26:08 +01:00
|
|
|
// println!("data: {:?}", &data);
|
|
|
|
|
println!("{}", String::from_utf8_lossy(&data[..]));
|
2018-11-20 18:10:36 +02:00
|
|
|
Ok(())
|
2018-08-08 08:36:17 -07:00
|
|
|
}
|