web-dev-qa-db-fra.com

Fin prématurée du corps du message délimité par Content-Length (attendu:

J'essaie d'obtenir une réponse HTTP avec l'aide d'Apache httpclient. J'obtiens des en-têtes avec succès, mais cela génère une exception lorsque j'essaie d'obtenir le contenu. L'exception est:

 org.Apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 203856; received: 1070
        at org.Apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.Java:180)
        at Sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.Java:283)
        at Sun.nio.cs.StreamDecoder.implRead(StreamDecoder.Java:325)
        at Sun.nio.cs.StreamDecoder.read(StreamDecoder.Java:177)
        at Java.io.InputStreamReader.read(InputStreamReader.Java:184)
        at Java.io.BufferedReader.fill(BufferedReader.Java:154)
        at Java.io.BufferedReader.readLine(BufferedReader.Java:317)
        at Java.io.BufferedReader.readLine(BufferedReader.Java:382)

et mon code est:

InputStream is = entity.getContent();
BufferedReader br = new BufferedReader( new InputStreamReader(is, "UTF-8"));
String line;
String str = "";
while ((line = br.readLine()) != null) {

    str = str + line + "\n";

}
log.debug(str);

toute aide serait appréciée. Merci

16
Khanjee

Le problème semble être du côté serveur, pas dans le code client que vous avez collé.

Le serveur a affirmé que le contenu contenait 203856 octets mais n'en a envoyé que 1070.

16
Daniel Renshaw

Je vais peut-être y répondre tard. Mais je rencontre également le même problème. Et j'en ai la résolution. Dans mon cas, je fermais le client avant d'utiliser HttpEntity. Et après avoir fermé le client, j'essayais de télécharger le fichier. Le code ci-dessous est similaire à ce que je faisais:

HttpEntity httpEntity = null;
try (final CloseableHttpClient client = createHttpClient()) {
     httpEntity = getEntity(client);
}

return downloadFile(httpEntity, targetDirectory, fileName);

Après avoir ajusté mon code pour télécharger le fichier avant de fermer le client, cela fonctionne maintenant pour moi. Le code ci-dessous est similaire à ce que j'ai fait maintenant:

try (final CloseableHttpClient client = createHttpClient()) {
     HttpEntity httpEntity = getEntity(client);
     return downloadFile(httpEntity, targetDirectory, fileName);
}
16
Nitin