Tengo un pequeño programa que envía una solicitud http y obtiene respuesta con el protocolo TCP.Obteniendo la respuesta de la solicitud http sin contenido-longitud?
Mi formato de solicitud;
GET/HTTP/1.0
Host: somewebsite.com
{two new line}
leí línea de respuesta por la línea de la toma (usando NetworkStream y StreamReader en C#) hasta que encuentre cabecera Content-Length. Guardo la longitud, luego sigo leyendo hasta encontrar una línea vacía. Luego crea un buffer con la longitud y recibe el resto de la respuesta.
Pero algunas respuestas no tienen un encabezado de longitud de contenido. Entonces mi enfoque falla. Si no sé cuántos bytes debería recibir, ¿cuándo debería parar?
Eso es muy engañoso. Si la respuesta tiene un campo de encabezado de longitud de contenido y no utiliza codificación fragmentada, esa es la información * solo * que tiene. Si recibe menos contenido, el contenido debe considerarse truncado. Si recibes más contenido, el seridor se rompe, o ya estás viendo la próxima respuesta. –
Estoy humildemente pidiendo una explicación sobre cómo leer la siguiente respuesta podría suceder en un único socket único, cuando el cliente no terminó de analizar el actual, por lo que es muy poco probable que haya enviado la próxima solicitud. Puedo entender mejor el voto negativo. De lo contrario, no veo ningún desacuerdo significativo sobre el asunto. ¿Qué harías cuando leas la longitud del contenido declarado y la lectura del socket te dice que quedan 2 bytes más? En realidad, decir "servidor roto estúpido, no voy a hablar contigo nunca más" no es aplicable tan a menudo como a los buenos programadores les gustaría. –
vtmarvin: el cliente podría usar la canalización. –