我一直在尝试构建一个网络爬虫,为它遇到的文件生成校验和。我不想为无限的数据流(互联网电台、实时视频源等)生成校验和,因为这会挂起爬虫,并最终导致它耗尽内存。因此,我需要一种方法来过滤掉这些。
我尝试检查content-length是否设置为-1,因为流媒体不报告内容长度,但发现许多其他服务器选择不报告其文档的内容长度,或者使用不报告内容长度的渐进式下载。我目前的解决方案是检查content-type是video/*还是audio/*,content-length是-1,但这可能会抛出渐进式下载的媒体文件,这些文件的长度不是无限的。
有没有一种简单的方法可以测试一个流是否无限长,而不需要检查它是否超过了任意值?我这个项目的语言是带有JSoup的Java,如果有关系的话。
发布于 2016-09-27 01:16:24
有没有一种简单的方法可以测试一个流是否无限长,而不需要检查它是否超过了任意值?
既没有简单的方法也没有困难的方法来确定在到达末尾之前可以从任意流中读取多少字节。实际上,即使web服务器发送指示特定内容长度的响应头,也不能保证它不会发送比广告更多的内容,甚至不能保证内容是有限的。
即使你使用你所描述的启发式方法,你也需要准备好切断内容,如果它超过了你准备容纳的时间。
发布于 2016-09-27 01:33:30
如果响应中没有Content-Length,您可以假定它的流,如果您看到:
Transfer-Encoding: chunkedhttps://stackoverflow.com/questions/39708507
复制相似问题