在Java中获得HTTP响应的大小
-
16-09-2019 - |
题
我想知道发送了多少数据来响应某个HTTP重试。我目前要做的是:
HttpURLConnection con = (HttpURLConnection) feedurl.openConnection();
//检查内容大小的int feedSize = con.getContentLength();
问题是,并不总是设置内容legnth。例如,当服务器使用传输编码=块时,我将获得-1的值。
我愿意 不是 需要此显示进度信息。我只需要知道完成后发送给我的数据的大小即可。
背景:我需要此信息,因为我想将其与使用GZIP编码发送的响应大小进行比较。
解决方案
我会用一个 Commons-io CountingInputStream, ,这将为您完成工作。一个完整但微不足道的例子:
public long countContent(URL feedurl) {
CountingInputStream counter = null;
try {
HttpURLConnection con = (HttpURLConnection) feedurl.openConnection();
counter = new CountingInputStream(con.getInputStream());
String output = IOUtils.toString(counter);
return counter.getByteCount();
} catch (IOException ex) {
throw new RuntimeException(ex);
} finally {
IOUtils.closeQuietly(counter);
}
}
其他提示
您可以扩展 FilterInputStream
, ,覆盖 read()
, read(byte[],int,int)
, , 和 skip
方法,以便在调用 super
表格,他们更新了一个字节读数的计数器。
然后包装输入流返回的输入流 URLConnection
其中之一,并使用包装器代替原始流。完成后,您可以查询包装纸的柜台。
其他(“手动”)方法将使用Yslow之类的工具在浏览器或Wireshark中收集统计信息,以检查网络上的流量。
不隶属于 StackOverflow