Content-Length 分隔的消息正文过早结束(预期:
Posted
技术标签:
【中文标题】Content-Length 分隔的消息正文过早结束(预期:【英文标题】:Premature end of Content-Length delimited message body (expected: 【发布时间】:2014-04-18 11:04:49 【问题描述】:我正在尝试在 apache httpclient 的帮助下获得 HTTP 响应。我成功获取了标题,但是当我尝试获取内容时它会引发异常。例外是:
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)
我的代码是:
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);
任何帮助将不胜感激。谢谢
【问题讨论】:
这个答案可能对你有帮助***.com/a/64595274/6585300 【参考方案1】:我可能回复晚了。但我也遇到同样的问题。我得到了它的解决方案。 在我的情况下,我在使用 HttpEntity 之前关闭了客户端。关闭客户端后,我试图下载文件。下面的代码与我正在做的类似:
HttpEntity httpEntity = null;
try (final CloseableHttpClient client = createHttpClient())
httpEntity = getEntity(client);
return downloadFile(httpEntity, targetDirectory, fileName);
在关闭客户端之前调整我的代码以下载文件后,它现在对我有用。下面的代码和我现在做的类似:
try (final CloseableHttpClient client = createHttpClient())
HttpEntity httpEntity = getEntity(client);
return downloadFile(httpEntity, targetDirectory, fileName);
【讨论】:
关闭客户端后怎么办?我必须在其他一些服务层中使用响应的输入流【参考方案2】:问题似乎出在服务器端,而不是您粘贴的客户端代码。
服务器声称内容包含 203856 个字节,但只发送了 1070 个。
【讨论】:
在我的例子中是expected: 548843; received: 536363
,我可以看到差别非常小。可能是什么原因?有没有办法克服或忽略它? imgur.com/ywGwvVQ 是我的客户代码
@daniel-renshaw 我同意,我遇到了同样的错误。检查服务器端日志后,我知道它是由于服务器端的异常而出现的。就我而言,这是服务器端端点上的 OutOfMemory 错误。因此,这不是客户端问题。【参考方案3】:
我在从 jenkins 下载 Jfrog Artifactory 文件并将 nginx 反向代理配置值 proxy_max_temp_file_size 更改为 0
解决了我的问题时遇到了同样的问题。
【讨论】:
【参考方案4】:我在返回之前关闭了流
【讨论】:
以上是关于Content-Length 分隔的消息正文过早结束(预期:的主要内容,如果未能解决你的问题,请参考以下文章