【问题标题】:Sync local file with HTTP server location (in Python)将本地文件与 HTTP 服务器位置同步(在 Python 中)
【发布时间】:2011-10-01 23:25:55
【问题描述】:

我有一个 HTTP 服务器,它托管一些大文件,并有下载它的 python 客户端(GUI 应用程序)。
我希望客户端仅在需要时下载文件,但每次运行时都有一个最新文件。

我认为每个客户端都会在每次运行时使用 If-Modified-Since HTTP 标头以及现有文件的文件时间(如果有)来下载文件。有人可以建议如何在 python 中做到这一点吗?

有人可以建议一种替代的、简单的方法来实现我的目标吗?

【问题讨论】:

  • 那么您有一些代码已经在您的 GUI 应用程序中下载了文件?如果我们能看到它会有所帮助。
  • Jochen-rsync 对 HTTP 服务器不起作用,不是吗? Rob- 如果文件不可用,我当前的代码只是 urllib.urlopen(url)...

标签: python http httpclient urllib2 if-modified-since


【解决方案1】:

您可以添加一个名为 ETag 的标头(文件的哈希值、md5sum 或 sha256 等),以比较两个文件是否不同而不是最后修改日期

【讨论】:

  • 我可以将此 ETag 添加到标准 HTTP 服务器吗?
【解决方案2】:

我现在假设一些事情,但是.. 一种解决方案是在服务器上创建一个单独的 HTTP 文件 (check.php),它会为您托管的每个文件创建一个哈希/校验和。如果文件与本地文件不同,则客户端将下载该文件。这意味着如果服务器上的文件内容发生变化,客户端会注意到变化,因为校验和会不同。

对文件内容进行 MD5 哈希,将其放入数据库或其他东西中,并在下载任何内容之前对其进行检查。

您的解决方案可以,但它要求服务器在 GET 请求的标头中实际包含“修改”日期(某些服务器软件不这样做)。

我会说建立一个看起来像这样的数据库:

[ID] [文件名] [文件哈希]

0001 moo.txt asd124kJKJhj124kjh12j

【讨论】:

    【解决方案3】:

    在我看来,最简单的解决方案是将文件托管在 mercurial 中,并使用 mercurial api 查找文件的哈希,如果哈希已更改,则下载文件。 计算哈希可以使用the answer to this question;下载文件urllib就足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      相关资源
      最近更新 更多