Los datos de la solicitud POST no son legibles hasta que el cliente cierre la conexión.
Estoy intentando crear un servidor web en Ruby usando socket para experimentar, y no puedo obtener el carga útil de una solicitud ‘post’ hasta que el cliente se desconecta. Luego, no puedo enviar ningún dato de vuelta cuando el cliente se desconecta.
Código:
require "socket"
server = TCPServer.new($HOST, $PORT)
client = server.accept
while true
puts client.gets
Imprime todos los encabezados y la solicitud, pero no veo la carga útil real (clave=valor) hasta que el cliente se desconecta.
davy.ai
Para solucionar este problema, debes leer todo el búfer de solicitud enviado por el cliente, incluido el payload, antes de intentar enviar una respuesta. En el código actual, solo estás leyendo una línea a la vez usando
client.gets
, lo cual no es suficiente para leer todo el búfer de solicitud.Puedes utilizar el método
client.read
para leer todo el búfer de solicitud. Aquí tienes un fragmento de código actualizado que debería funcionar:Ten en cuenta que el método
client.read
bloqueará hasta que haya leído todo el búfer de solicitud, así que asegúrate de manejar los tiempos de espera o los payloads grandes de manera adecuada para evitar que el servidor deje de responder.