Si un PDF ou un tableur supposé commence par HTTP/1.1 200 OK, le téléchargeur a enregistré une réponse brute au lieu du fichier. Cette réponse schématique ne contient que quatre octets de contenu :

HTTP/1.1 200 OK
Transfer-Encoding: chunked

4
DATA
0

Le fichier est DATA. La ligne de statut, les en-têtes, le marqueur de taille et la structure de terminaison appartiennent à HTTP. Supprimer un nombre fixe d'octets n'est pas sûr car les longueurs d'en-tête varient. Copier tout ce qui suit la première ligne vide laisse encore le cadrage par blocs, et des réponses informatives peuvent précéder la réponse finale.

Pour un téléchargement normal, remplacez la copie socket brut vers fichier par l'interface de corps de réponse du client HTTP. Configurez son proxy, validez le statut final et diffusez le corps vers une sortie temporaire. Le client gère le cadrage du message : les corps délimités par la longueur, par blocs et par la connexion exigent une analyse différente.

L'encodage du contenu est une couche supplémentaire. Décidez si vous avez besoin des octets décodés du fichier ou d'un contenu brut explicitement demandé, selon le comportement documenté du client. Des octets compressés ne sont pas automatiquement une corruption du proxy.

Si l'application doit conserver du code au niveau de la socket, elle assume toutes ces règles d'analyse ainsi que la gestion de lecture et d'écriture. N'écrivez que le nombre d'octets réellement renvoyés par une lecture, pas la capacité du tampon, et gérez les écritures partielles. Sinon, un contenu de tampon périmé peut corrompre même un corps correctement extrait.

HTTPS exige plus que le dépouillement d'une réponse CONNECT : après l'établissement réussi du tunnel, établissez TLS vers la destination, puis analysez la réponse HTTP interne. Les octets chiffrés qui suivent les en-têtes du proxy ne sont pas le fichier téléchargeable.

Laissez la sortie échouée ou incomplète sous un nom temporaire. Ne la publiez qu'après la réussite du transfert et des vérifications du fichier ; un fichier non vide ne prouve pas un téléchargement complet.

Articles similaires