From c764c4580756559b4d32271f79b78a2321b5ba08 Mon Sep 17 00:00:00 2001 From: andrzej Date: Sun, 10 Nov 2024 18:52:15 +0100 Subject: [PATCH] send http response --- Main.java | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/Main.java b/Main.java index f8a1985..4570b5b 100644 --- a/Main.java +++ b/Main.java @@ -1,8 +1,11 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; +import java.util.ArrayList; +import java.util.List; public class Main { @@ -10,6 +13,7 @@ public class Main { try (ServerSocket serverSocket = new ServerSocket(8080)) { System.out.println("listening on socket 8080..."); while (true) { + // .accept() blocks until we have a client try (Socket client = serverSocket.accept()) { handleClient(client); } @@ -28,8 +32,34 @@ public class Main { requestBuilder.append(line + "\r\n"); } String request = requestBuilder.toString(); - System.out.println(request); + // System.out.println(request); + String[] requestLines = request.split("\r\n"); + String[] requestLine = requestLines[0].split(" "); + String method = requestLine[0]; + String path = requestLine[1]; + String version = requestLine[2]; + String host = requestLines[1].split(" ")[1]; + List headers = new ArrayList<>(); + // we start the loop from 2 because 0 is GET / HTTP/1.1 and 1 is the host + for (int h = 2; h < requestLines.length; h++) { + String header = requestLines[h]; + headers.add(header); + } + + String accessLog = String.format("Client %s, method %s, path %s, version %s, host %s, headers %s", + client.toString(), + method, path, version, host, headers.toString()); + System.out.println(accessLog); + + OutputStream clientOutput = client.getOutputStream(); + clientOutput.write("HTTP/1.1 200 OK\r\n".getBytes()); + clientOutput.write("ContentType: text/html\r\n".getBytes()); + clientOutput.write("\r\n".getBytes()); + clientOutput.write("Hurray!!!1!".getBytes()); + clientOutput.write("\r\n\r\n".getBytes()); + clientOutput.flush(); + client.close(); } }