测试无限内容长度

时间:2016-09-26 17:05:31

标签: java url streaming content-type checksum

我一直在努力构建一个网络抓取工具,它会生成所遇到文件的校验和。我不想为无限流(互联网广播,实时视频反馈等)生成校验和,因为它会挂起爬虫并最终导致内存不足。因此,我需要一种方法来过滤掉这些。

我尝试检查content-length是否设置为-1,因为流媒体不报告内容长度,但发现许多其他服务器选择不在其文档上报告内容长度,或者使用渐进式下载不报告内容长度。我目前的解决方案是检查content-typevideo/*还是audio/*content-length是否为-1,但是这有可能会丢弃逐步下载的媒体文件; t无限长。

是否有一种简单的方法可以测试流是否无限长而无需检查它是否超过任意值?如果重要的话,我的这个项目的语言是带JSoup的Java。

2 个答案:

答案 0 :(得分:1)

  

是否有一种简单的方法可以测试流是否无限长而无需检查它是否超过任意值?

既没有一种简单的方法也没有一种难以确定的方法可以确定在到达结束之前可以从任意流中读取多少字节。实际上,即使Web服务器发送指示特定内容长度的响应头,也不能保证它不会发送比播放的内容更多的内容,甚至内容是有限的。

即使您使用了您所描述的启发式方法,如果内容超出您准备容纳的范围,您也需要准备好切断内容。

答案 1 :(得分:1)

如果在回复中没有Content-Length,你可以看看它的流:

Transfer-Encoding: chunked

https://en.wikipedia.org/wiki/Chunked_transfer_encoding