Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Premature end of Content-Length delimited message body (expected:

I am trying to get HTTP response with the help of apache httpclient. I get headers successfully but it throws exception when I try to get contents. Exception is:

 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)

and my code is:

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);

any help will be appreciated. thanks

like image 542
Khanjee Avatar asked Apr 18 '14 11:04

Khanjee


4 Answers

I might be replying on it late. But I also encounter the same problem. And I got the resolution of it. In my case I was closing the client before utilizing the HttpEntity. And after closing the client I was trying to download the file. Below code is similar to what I was doing:

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

return downloadFile(httpEntity, targetDirectory, fileName);

After adjusting my code to download the file before closing the client, Its working now for me. Below code is similar to what I did now:

try (final CloseableHttpClient client = createHttpClient()) {
     HttpEntity httpEntity = getEntity(client);
     return downloadFile(httpEntity, targetDirectory, fileName);
}
like image 78
Nitin Singhal Avatar answered Sep 30 '22 08:09

Nitin Singhal


The problem appears to be on the server-side, not in the client code you've pasted.

The server claimed that the content contained 203856 bytes but only sent 1070.

like image 34
Daniel Renshaw Avatar answered Sep 30 '22 09:09

Daniel Renshaw


I got the same issue while downloading the file from Jfrog Artifactory from jenkins and Changing the Nginx reverse proxy config value proxy_max_temp_file_size to 0solved my issue.

like image 25
SNR Avatar answered Sep 30 '22 07:09

SNR


I was closing the stream before returning it enter image description here

like image 35
Chris Gunawardena Avatar answered Sep 30 '22 09:09

Chris Gunawardena