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 分隔的消息正文过早结束(预期:的主要内容,如果未能解决你的问题,请参考以下文章

安装 ObjectAid 时出现 Eclipse 错误

膨胀 gzip HTTP 响应正文时“源过早耗尽”

C ++逗号分隔的输入数组代码过早退出

content-length怎么算的

如果语句过早退出Bash脚本循环

网站基础