summaryrefslogtreecommitdiffstats
path: root/vendor/tokio-native-tls/examples/download-rust-lang.rs
blob: 6f864c38ab27c119ab54e8d3716e8bf5c6bf31f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// #![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(())
}