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
15 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);
} 1 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.
2I 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.
I was closing the stream before returning it
I encountered a similar error and solved it by persisting my HTTP connection for a few extra seconds. Something likeBasically add a keep-alive header on the HTTP request for something like 3-5 sec
1