我正在尝试通过HTTP从外部服务器下载大文件。响应没有Content-Length
标头,但有Transfer-Encoding: chunked
。
在我的Java程序中,我执行以下操作:
程序完成,没有引发任何异常。但是,我知道它还没有下载整个文件,因为如果没有睡眠,响应大小会更大。
我了解服务器无法无限期地等待我,但是客户端是否有办法了解响应是否已完全下载?
我使用的是Apache httpcomponents:httpclient v4.5.6。
var client = HttpClients.custom()
.disableContentCompression()
.build();
HttpGet request = createRequest();
var response = client.execute(request);
var is = response.getEntity().getContent();
int count = 0;
var os = new FileOutputStream("/tmp/test.gz");
byte[] buffer = new byte[512];
int read = is.read(buffer);
while (read >= 0) {
os.write(buffer, 0, read);
read = is.read(buffer);
count++;
if (count == 10_000) {
Thread.sleep(100_000);
}
}
is.close();
os.close();
谢谢!