获取java中http响应的大小

zu0ti5jz  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(758)

我想知道响应某个http请求发送了多少数据。我现在做的是:

HttpURLConnection con = (HttpURLConnection) feedurl.openConnection();

//检查content size int feedsize=con.getcontentlength()的响应;
问题是,内容长度并不总是固定的。e、 当服务器使用transfer encoding=chunked时,我得到一个值-1。
我不需要这个来显示进度信息。我只需要知道数据的大小,是发送给我后,它已经完成。
背景:我需要这些信息,因为我想将其与使用gzip编码发送的响应的大小进行比较。

30byixjq

30byixjq1#

你可以延长 FilterInputStream ,重写 read() , read(byte[],int,int) ,和 skip 方法,以便在调用 super 窗体中,它们用读取的字节数更新计数器。
然后 Package URLConnection 并使用 Package 器代替原始流。完成后,可以查询 Package 器的计数器。
其他(“手动”)方法是使用yslow这样的工具在浏览器中收集统计数据,或者wireshark检查网络上的流量。

goucqfw6

goucqfw62#

我会使用一个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);
  }
}

相关问题