Python 防止下载过大的文件
我有一个网站,人们可以在那里填写新闻源的url。然后,我的服务器将下载该新闻提要并对其进行解析。我如何保护自己不受太大的新闻提要的影响Python 防止下载过大的文件,python,http,Python,Http,我有一个网站,人们可以在那里填写新闻源的url。然后,我的服务器将下载该新闻提要并对其进行解析。我如何保护自己不受太大的新闻提要的影响 太大了,我的意思是:太大了,以至于下载需要太多的时间、带宽或文件空间。我可以设置接收MB的数量限制吗?或者限制下载时间?我知道的每个http客户端库(至少在Python中)都会给您或可以给您一个流: 这取决于您如何从流中阅读: >>> r.raw.read(10) '\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x0
太大了,我的意思是:太大了,以至于下载需要太多的时间、带宽或文件空间。我可以设置接收MB的数量限制吗?或者限制下载时间?我知道的每个http客户端库(至少在Python中)都会给您或可以给您一个流: 这取决于您如何从流中阅读:
>>> r.raw.read(10)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
如果我想按最大时间和最大大小限制下载,我会这样做:
t0 = time.time()
total_size = 0
while True:
if time.time() - t0 > time_limit:
raise Exception("Too much time taken")
if total_size > size_limit:
raise Exception("Too large")
data = r.raw.read(8192)
if data == "":
break # end of file
total_size += len(data)
output_file.write(data)
当您过早退出HTTP连接时,web服务器不会停止工作:)此处的信息不足。你是怎么下载的?您是否获得内容长度(如果适用)-您能否检索到大小,如果没有,您是否认为它容易对您“撒谎”。。。。在读取'n'数量等后,是否可以截断流。。。等等…->头HTTPmethod@Jon我是如何下载的?这就是我所要求的。urllib?httpconnection?@Alberto Megía这个答案告诉我们,在一定数量的字节后是不可能切断的。但是,经过一段时间后,如何切割呢?使用一个单独的过程下载和杀死它,如果它需要太长?所以我必须安装请求库?我使用的是Python3.3No,您不必这么做。我只是习惯于请求,因为我喜欢它的简单API。您可以使用urllib,它位于Python标准库中:您让我走上了正确的轨道。我现在使用feed=urllib.request.urlopen(url.read)(1000000)。这不会下载整个文件,而只下载所需的内容。
>>> r.raw.read(10)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
t0 = time.time()
total_size = 0
while True:
if time.time() - t0 > time_limit:
raise Exception("Too much time taken")
if total_size > size_limit:
raise Exception("Too large")
data = r.raw.read(8192)
if data == "":
break # end of file
total_size += len(data)
output_file.write(data)