40 lines
926 B
Rust
40 lines
926 B
Rust
use std::{
|
|
io::{Read, Write},
|
|
net::TcpStream,
|
|
};
|
|
|
|
pub mod server;
|
|
pub mod tls;
|
|
|
|
pub struct Request {
|
|
host: String,
|
|
path: String,
|
|
}
|
|
|
|
impl Request {
|
|
pub fn new(url: &str) -> Self {
|
|
Self {
|
|
host: url.to_string(),
|
|
path: String::from("/"),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Request {
|
|
pub fn send(&self) -> String {
|
|
let mut tcp = TcpStream::connect((self.host.as_str(), 443)).unwrap();
|
|
let mut conn = tls::tls13_handshake(&self.host, &mut tcp).unwrap();
|
|
let mut tls = rustls::Stream::new(&mut conn, &mut tcp);
|
|
write!(
|
|
tls,
|
|
"GET {} HTTP/1.1\r\nHost: {}\r\nConnection: close\r\nUser-Agent: rustls/0.23\r\n\r\n",
|
|
self.path, self.host
|
|
)
|
|
.unwrap();
|
|
tls.flush().unwrap();
|
|
let mut resp = Vec::new();
|
|
tls.read_to_end(&mut resp).unwrap();
|
|
String::from_utf8(resp).unwrap()
|
|
}
|
|
}
|