从远程zip,HTTP,Python,套接字检索文件

时间:2017-04-14 20:37:28

标签: python sockets http http-headers zip

我想使用http://www.codeproject.com/KB/cs/remotezip.aspx中描述的HTTP范围方法检索远程服务器上的zip文件中的文件名列表和特定文件(来自此zip)而不下载整个zip内容

我知道如何使用Range: ...标题,我知道如何将部分图像下载并将各部分连接在一起构成图像:

  1. 创建套接字
  2. 连接
  3. 发送请求:HEAD %s HTTP/1.1\r\nHOST: %s\r\n\r\n仅接收标头并在Content-Length内找到(我知道它并不总是最佳选择,但我的服务器支持它),以便了解我们需要的图像大小下载
  4. 使用GET发送Range: ...,然后收到回复
  5. 重复步骤4直到您下载整个图像
  6. 但是,我不知道如何完成我描述的任务(带拉链的那个)。我看到了这个主题:Is there a library for retrieving a file from a remote zip?但人们使用库。这不是我的目标。我想知道原始HTTP如何在zip上运行。

1 个答案:

答案 0 :(得分:1)

HTTP中的ZIP没有什么特别之处。 ZIP文件只是数据,就像其他任何东西一样。带有ZIP的HTTP范围与带有图像的HTTP范围相同,即只从某些远程数据中检索字节范围。

从远程ZIP中仅提取单个文件而不下载整个文件的方式与使用本地文件或使用遍布多个媒体的ZIP存档执行相同操作的方式相同:首先,您必须获取中央目录从文件的末尾,然后您可以获取特定文件的字节,因为必要的偏移量在中央目录中定义。一旦你有压缩文件,你可以解压缩它。除了获得一系列字节之外,这里没有特定于HTTP的内容,但您已经意识到可以使用HTTP Range标头执行此操作。

因此,只需按照您已链接的文章中的实现进行操作,并替换您不希望拥有自己重新实现特定部分的库的所有内容,即重新实现zlib压缩,如果如果需要,需要并重新实现HTTP。使用HTTP范围确实获取ZIP文件的部分与使用HTTP范围获取图像的一部分没有什么不同,您已经知道如何处理最后一个。

相关问题