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);
任意の助けをいただければ幸いです。ありがとう
問題は、貼り付けたクライアントコードではなく、サーバー側にあるようです。
サーバーはコンテンツに203856バイトが含まれているが1070しか送信されていないと主張しました.
返事が遅くなるかもしれません。しかし、私も同じ問題に遭遇します。そして、私はそれの解決を得ました。私の場合、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);
}