我想知道发送了多少数据来响应某个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中收集统计信息,以检查网络上的流量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top