From 6b1d936e1685e1d0e96e0885ec5191f3df69280e Mon Sep 17 00:00:00 2001 From: dhanushrajgp Date: Sat, 13 Jul 2024 01:01:57 +0530 Subject: [PATCH] Validating the Request and Selectively Responding --- 404.html | 11 +++++++++++ src/main.rs | 29 ++++++++++++++++++----------- 2 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 404.html diff --git a/404.html b/404.html new file mode 100644 index 0000000..6957a82 --- /dev/null +++ b/404.html @@ -0,0 +1,11 @@ + + + + + Hello! + + +

Oops!

+

Sorry, I don't know what you're asking for.

+ + diff --git a/src/main.rs b/src/main.rs index 56175c7..44eeaf7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,17 +15,24 @@ fn main() { fn handle_connection(mut stream: TcpStream) { let buf_reader = BufReader::new(&mut stream); - let _http_request: Vec<_> = buf_reader - .lines() - .map(|result| result.unwrap()) - .take_while(|line| !line.is_empty()) - .collect(); + let request_line = buf_reader.lines().next().unwrap().unwrap(); - let status_line = "HTTP/1.1 200 OK"; - let contents = fs::read_to_string("hello.html").unwrap(); - let length = contents.len(); + if request_line == "GET / HTTP/1.1" { + let status_line = "HTTP/1.1 200 OK"; + let contents = fs::read_to_string("hello.html").unwrap(); + let length = contents.len(); - let response = format!("{status_line}\r\n Content length: {length} \r\n\r\n {contents}"); - - stream.write_all(response.as_bytes()).unwrap(); + let response = format!("{status_line}\r\n Content length: {length} \r\n\r\n {contents}"); + stream.write_all(response.as_bytes()).unwrap(); + } else { + let status_line = "HTTP/1.1 404 NOT FOUND"; + let contents = fs::read_to_string("404.html").unwrap(); + let length = contents.len(); + let response = format!( + "{status_line}\r\n\ + Content-Length: {length}\r\n\r\n + {contents}" + ); + stream.write_all(response.as_bytes()).unwrap(); + } }