Shkarkime Java përmes proxy-t kur getContentLengthLong kthen -1
Trajto një Content-Length të panjohur në një shkarkim Java përmes proxy-t pa i trajtuar metadat e madhësisë që mungojnë si përgjigje bosh.
getContentLengthLong() == -1 do të thotë se nuk ka gjatësi të njohur të përmbajtjes në metadat e disponueshme. Vazhdo leximin e rrjedhës dhe shfaq bajtët e marrë ose progres të pacaktuar; mos e trajto si përgjigje bosh dhe mos aloko një bufer me madhësi negative.
long expected = connection.getContentLengthLong();
long received = 0;
byte[] buffer = new byte[8192];
try (InputStream input = connection.getInputStream()) {
int count;
while ((count = input.read(buffer)) != -1) {
output.write(buffer, 0, count);
received += count;
}
}
Lidhja është konfiguruar tashmë dhe output zotërohet nga thirrësi. Mbaj afatet e lidhjes dhe leximit si dhe çdo kufi madhësie të aplikacionit rreth këtij cikli. Një gabim I/O është shkarkim i dështuar, jo përfundim i suksesshëm me më pak bajtë.
Krahaso gjatësitë në të njëjtin shtresë. Kodimi chunked i HTTP/1.1 mund të zëvendësojë Content-Length dhe dekodohet nga implementimi HTTP. Një proxy mund ta rikornizojë. Dekompresimi gjithashtu mund ta bëjë numrin e bajtëve të dekoduar të aplikacionit të ndryshëm nga një Content-Length i koduar.
Nëse shfaqen njëkohësisht Transfer-Encoding dhe Content-Length, mos zgjidh një numër të përshtatshëm: kornizimi HTTP i jep përparësi kodimit të transferimit dhe e trajton kombinimin si gabim të mundshëm. Lëre atë analizë një implementimi konform.
Një URL FTP përmes një portali HTTP kërkon verifikimin e sjelljes konkrete të URLConnection; nuk garanton që çdo aksesues i kokës HTTP sillet si në një URL HTTP të zakonshme në çdo JDK. Përdor API-n e gjatësisë me vlerë të gjatë aty ku metadat kanë rëndësi, dhe valido artefaktin e përfunduar ndaj gjatësisë ose shumës kontrolluese që kërkohet në të vërtetë. Leximi i trupit nuk bën që një kokë që mungonte më parë të shfaqet.