在Python中打开URL并获取最多X字节的最佳方法是什么?

3

我希望有一个机器人每小时获取一个URL,但如果网站的运营者是恶意的,他可能会让他的服务器发送给我一个1 GB的文件。有没有一种好的方法来限制下载,比如说限制在100KB并在达到这个限制后停止下载呢?

我可以想象自己从头开始编写连接处理程序,但如果可能的话,我还是希望使用urllib2,并以某种方式指定限制。

谢谢!


以下是一种非常简单的读取 X 个字节的方式:urllib.urlopen("url").read(1024) - kyle k
1个回答

7

这可能是你正在寻找的内容:

import urllib

def download(url, bytes = 1024):
    """Copy the contents of a file from a given URL
    to a local file.
    """
    webFile = urllib.urlopen(url)
    localFile = open(url.split('/')[-1], 'w')
    localFile.write(webFile.read(bytes))
    webFile.close()
    localFile.close()

read() 接受一个字节参数?太好了,这正是我想要的,非常感谢!我在文档中找不到它... - Stavros Korokithakis
1
Python的文件对象最重要的方法被几乎所有类似文件的对象所实现。请参考http://docs.python.org/library/stdtypes.html#file.read。 - ʇsәɹoɈ
谢谢,我知道file.read(),但没有意识到url.read()实现了相同的语义。 - Stavros Korokithakis
上次我尝试使用这种技术失败了,因为从HTTP服务器中仅读取指定数量的数据实际上是不可能的,也就是说,您隐式地读取了所有HTTP响应,然后才读取其中的前N个字节。因此,最终您将下载整个1GB恶意响应。 - Konstantin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接