【问题标题】:Premature end of Content-Length delimited message body (expected:Content-Length 分隔的消息正文过早结束(预期:
【发布时间】:2017-03-25 12:49:48
【问题描述】:

我正在尝试在 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);

任何帮助将不胜感激。谢谢

【问题讨论】:

标签: java apache-httpclient-4.x


【解决方案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】:

    我在返回之前关闭了流

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多