【问题标题】:What is the best way to open a URL and get up to X bytes in Python?在 Python 中打开 URL 并获得最多 X 个字节的最佳方法是什么?
【发布时间】:2011-02-28 12:10:07
【问题描述】:

我想让机器人每小时获取一个 URL,但如果站点的运营商是恶意的,他可以让他的服务器向我发送一个 1 GB 的文件。有没有一种好的方法可以将下载限制为 100 KB 并在该限制之后停止?

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

谢谢!

【问题讨论】:

  • 这里有一个非常简单的读取X字节的方法urllib.urlopen("url").read(1024)

标签: python http url sockets


【解决方案1】:

这可能就是你要找的:

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() 接受字节参数?太棒了,正是我想要的,非常感谢!我无法在文档中找到它...
  • docs.python.org/library/stdtypes.html#file.read(python文件对象最重要的方法几乎都是python中所有类文件对象实现的。)
  • 谢谢,我知道 file.read() 但没有意识到在 url.read() 中实现了相同的语义...
  • 上次我尝试这种技术失败了,因为实际上不可能从 HTTP 服务器读取指定数量的数据,即您隐式读取所有 HTTP 响应,然后才从中读取前 N 个字节.所以最后你最终下载了整个 1Gb 的恶意响应
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
相关资源
最近更新 更多