Când fișierul descărcat începe cu o linie de stare HTTP
Țineți încadrarea răspunsului HTTP în afara artefactului descărcat, în loc să copiați fiecare octet primit din socketul proxy în fișierul de ieșire.
Dacă un presupus PDF sau o foaie de calcul începe cu HTTP/1.1 200 OK, descărcătorul a salvat un răspuns brut în locul artefactului. Acest răspuns schematic conține doar patru octeți de conținut:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
4
DATA
0
Artefactul este DATA. Linia de stare, antetele, marcajul de dimensiune și structura de terminare aparțin HTTP. Eliminarea unui număr fix de octeți nu este sigură deoarece lungimile antetelor variază. Copierea a tot ce urmează după primul rând gol lasă totuși încadrarea pe fragmente, iar răspunsurile informative pot preceda răspunsul final.
Pentru o descărcare normală, înlocuiți copierea din socketul brut în fișier cu interfața de corp de răspuns a clientului HTTP. Configurați proxy-ul acestuia, validați starea finală și transmiteți corpul către o ieșire temporară. Clientul gestionează încadrarea mesajului: corpurile delimitate prin lungime, pe fragmente (chunked) și delimitate prin conexiune necesită analize diferite.
Codificarea conținutului este un alt strat. Decideți dacă aveți nevoie de octeți decodați ai artefactului sau de conținut brut solicitat explicit, folosind comportamentul documentat al clientului. Octeții comprimați nu sunt automat corupere a proxy-ului.
Dacă aplicația trebuie să păstreze cod la nivel de socket, îi revine responsabilitatea pentru toate aceste reguli de analiză, precum și pentru gestionarea citirii și scrierii. Scrieți doar numărul de octeți returnați efectiv de o citire, nu capacitatea bufferului, și gestionați scrierile parțiale. Altfel, conținutul vechi din buffer poate corupe chiar și un corp extras corect.
HTTPS necesită mai mult decât eliminarea unui răspuns CONNECT: după stabilirea cu succes a tunelului, stabiliți TLS către destinație și apoi analizați răspunsul HTTP interior. Octeții criptați de după antetele proxy-ului nu sunt fișierul descărcabil.
Lăsați ieșirea eșuată sau incompletă sub un nume temporar. Publicați-o doar după ce transferul și verificările artefactului reușesc; un fișier nevid nu demonstrează o descărcare completă.