Cuando el archivo descargado comienza con una línea de estado HTTP
Mantenga el encuadre de la respuesta HTTP fuera del archivo descargado en lugar de copiar cada byte recibido de un socket de proxy al archivo de salida.
Si un supuesto PDF o una hoja de cálculo comienza con HTTP/1.1 200 OK, el descargador guardó una respuesta sin procesar en lugar del archivo. Esta respuesta esquemática contiene solo cuatro bytes de contenido:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
4
DATA
0
El archivo es DATA. La línea de estado, las cabeceras, el marcador de tamaño y la estructura de terminación pertenecen a HTTP. Eliminar un número fijo de bytes no es seguro porque las longitudes de las cabeceras varían. Copiar todo lo que sigue a la primera línea en blanco todavía deja el encuadre de fragmentos, y las respuestas informativas pueden preceder a la respuesta final.
Para una descarga normal, sustituya la copia de socket sin procesar a archivo por la interfaz de cuerpo de respuesta del cliente HTTP. Configure su proxy, valide el estado final y transmita el cuerpo a una salida temporal. El cliente gestiona el encuadre del mensaje: los cuerpos delimitados por longitud, por fragmentos y por conexión requieren un análisis distinto.
La codificación del contenido es otra capa. Decida si necesita bytes decodificados del archivo o contenido sin procesar solicitado explícitamente, según el comportamiento documentado del cliente. Los bytes comprimidos no son automáticamente una corrupción del proxy.
Si la aplicación debe conservar código a nivel de socket, asume todas esas reglas de análisis además del manejo de lectura y escritura. Escriba solo el número de bytes que realmente devuelve una lectura, no la capacidad del búfer, y gestione las escrituras parciales. De lo contrario, el contenido obsoleto del búfer puede corromper incluso un cuerpo extraído correctamente.
HTTPS requiere más que despojar una respuesta CONNECT: tras establecer el túnel correctamente, establezca TLS de destino y luego analice la respuesta HTTP interna. Los bytes cifrados que siguen a las cabeceras del proxy no son el archivo descargable.
Deje la salida fallida o incompleta con un nombre temporal. Publíquela solo cuando la transferencia y las comprobaciones del archivo tengan éxito; un archivo no vacío no demuestra una descarga completa.