【问题标题】:Download first N bytes of a file in python在python中下载文件的前N个字节
【发布时间】:2013-01-31 10:38:51
【问题描述】:

我在某处 (FTP/HTTP) 有一个大文件。

我想要

  1. 先下载N字节,
  2. 检查其嵌入文件的头部(版本是否不同)
  3. 然后决定是继续还是中止下载。

这绝对不是我想象的那么简单的任务(令我惊讶)。即使在外部调用 wget/curl 似乎也不是一个好的解决方案(也许我忽略了正确的命令行选项)。

如何在 Python 中尽可能简单地做到这一点?

我正在考虑为ftp.retrbinary 提供一个自定义处理程序,一旦块的总和超过定义的值,它就会引发异常,但在我看来这太过分了。 Python 代码应该很优雅吧?

【问题讨论】:

  • 您只需要标题吗?看看requests;它让您流式传输请求,您可以在其中仅获取标头,然后如果您也想关闭连接。 或者如果你愿意,也可以读取响应正文的前 N ​​个字节。
  • Dikei:我已经看到了答案,但它不包括 FTP,我也需要这个。

标签: python http ftp download


【解决方案1】:

如果您只想检查标头,请发送 HTTP Head,而不是 GET。 它将返回与 GET 相同的标头,没有消息正文。

HEAD 方法与 GET 相同,只是服务器不能 在响应中返回消息体。包含的元信息 在响应 HEAD 请求的 HTTP 标头中应该是相同的 为响应 GET 请求而发送的信息。

可以发送 HEAD 详细信息here


编辑:

如果确实需要前 N 个字节,可以将 urllib2Range header. Range: bytes=0-N 结合使用。

【讨论】:

  • 听起来 Miro 对嵌入在文件中的标头更感兴趣,而不是 HTTP 标头。
  • @MiroKropacek 在这种情况下,您可以将Range 标头与GET 结合使用。
猜你喜欢
  • 2017-08-31
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多