Estoy utilizando el socket de Python para construir HTTPServer, pero mi respuesta de CSS se queda pendiente.
Estoy haciendo un httpServer. Cuando el cliente ingrese localhost: 8888 / good.html
, será dirigido a la página correspondiente.
Lo que me confunde es que mi respuesta CSS (res_for_style
) sigue pendiente. Por favor, avíseme dónde me equivoqué.
Server.py
import socket
import json
import sys
import threading
pars = ('127.0.0.1', 8888)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(pars)
s.listen(5)
res_for_good = '''HTTP/1.1 200 OK
Content-Type: text/html
<head>
<link rel="stylesheet" href="./style.css" type="text/css">
</head>
<html>
<body>good HaHa</body>
</html>
'''
res_for_style = '''HTTP/1.1 200 OK
Content-Type: text/css
body{
color: red;
}
'''
def serveClient(clientsocket, address):
while True:
data = clientsocket.recv(1024)
data_utf8 = data.decode('utf-8').split('\r\n')
if '/good.html' in data_utf8[0]:
clientsocket.sendall(res_for_good.encode())
if '/style.css' in data_utf8[0]:
print("transfer css")
res = "Content-Type: text/css\n\n" + css_file.read()
clientsocket.sendall(res_for_style.encode())
if data == b'':
clientsocket.close()
break
while True:
(clientsocket, address) = s.accept()
threading.Thread(target=serveClient, args=(clientsocket, address)).start()
davy.ai
El problema parece estar en la variable
res_for_style
. En lugar de asignarle la respuesta que incluye el archivo CSS, se le está asignando una cadena vacía (''
). Luego, en el bloqueif '/style.css' in data_utf8[0]:
, se lee el archivo CSS y se construye la respuesta sobre la marcha. Sin embargo, nunca se envía esta respuesta de vuelta al cliente.Para solucionar esto, debería asignar la respuesta de CSS a
res_for_style
cuando el servidor se inicia, y luego enviarla de vuelta al cliente cuando se solicita el archivo CSS. Aquí hay una versión actualizada de la funciónserveClient
que debería funcionar:Y aquí está la parte superior actualizada de
Server.py
para incluir la respuesta de CSS:Ahora, cuando se solicita
localhost:8888/good.html
, el servidor devolverá la respuesta HTML y el archivo CSS.