Exercices CM 1

This commit is contained in:
khannurien
2026-01-16 20:21:02 +01:00
parent ed3100a3e7
commit 1eb0ffc866
7 changed files with 230 additions and 0 deletions

62
exercice5.ts Normal file
View File

@@ -0,0 +1,62 @@
const listener = Deno.listen({ port: 8080 });
const decoder = new TextDecoder();
const encoder = new TextEncoder();
for await (const conn of listener) {
handleConn(conn);
}
async function handleConn(conn: Deno.Conn) {
const buf = new Uint8Array(1024);
const bytes = await conn.read(buf);
if (bytes === null) {
conn.close();
return;
}
const rawRequest = decoder.decode(buf.subarray(0, bytes));
console.log(rawRequest);
const [
requestMethod,
requestHost,
requestUserAgent,
requestAccept,
requestContentType,
requestContentLength,
_,
requestBody,
] = rawRequest.split("\r\n");
const [method, path, protocol] = requestMethod.split(" ");
const [, host] = requestHost.split(" ");
const [, userAgent] = requestUserAgent.split(" ");
const [, accept] = requestAccept.split(" ");
const [, contentType] = requestContentType.split(" ");
const [, contentLength] = requestContentLength.split(" ");
const responseBody = `{` +
`"method": "${method}",` +
`"path": "${path}",` +
`"protocol": "${protocol}",` +
`"host": "${host}",` +
`"user-agent": "${userAgent}",` +
`"accept": "${accept}",` +
`"content-type": "${contentType}",` +
`"content-length": "${contentLength}",` +
`"body": "${requestBody}"` +
`}\n`;
const response =
"HTTP/1.1 200 OK\r\n" +
"Content-Type: text/json\r\n" +
`Content-Length: ${responseBody.length}\r\n` +
"Connection: close\r\n" +
"\r\n" +
responseBody;
await conn.write(encoder.encode(response));
conn.close();
}