我有一个 HTTP 服务器,它托管一些大文件,并有下载它的 python 客户端(GUI 应用程序)。
我希望客户端仅在需要时才下载文件,但每次运行时都有一个最新文件。
我认为每个客户端都会在每次运行时使用 If-Modified-Since HTTP 标头和现有文件的文件时间(如果有)下载文件。有人可以建议如何在 python 中做到这一点吗?
有人可以建议一种替代的、简单的方法来实现我的目标吗?
我有一个 HTTP 服务器,它托管一些大文件,并有下载它的 python 客户端(GUI 应用程序)。
我希望客户端仅在需要时才下载文件,但每次运行时都有一个最新文件。
我认为每个客户端都会在每次运行时使用 If-Modified-Since HTTP 标头和现有文件的文件时间(如果有)下载文件。有人可以建议如何在 python 中做到这一点吗?
有人可以建议一种替代的、简单的方法来实现我的目标吗?
您可以添加一个名为ETag
, (文件的哈希,md5sum 或 sha256 等)的标题,以比较两个文件是否不同而不是最后修改日期
我现在假设一些事情,但是.. 一种解决方案是在服务器上拥有一个单独的 HTTP 文件 (check.php),它会为您托管的每个文件创建一个哈希/校验和。如果文件与本地文件不同,则客户端将下载该文件。这意味着如果服务器上的文件内容发生变化,客户端会注意到变化,因为校验和会有所不同。
对文件内容进行 MD5 哈希,将其放入数据库或其他东西中,并在下载任何内容之前对其进行检查。
您的解决方案可以,但它需要服务器在 GET 请求的标头中实际包含“修改”日期(某些服务器软件不这样做)。
我会说建立一个看起来像这样的数据库:
[ID] [文件名] [文件哈希]
0001 moo.txt asd124kJKJhj124kjh12j
在我看来,最简单的解决方案是在 mercurial 中托管文件并使用 mercurial api 查找文件的哈希,如果哈希发生更改则下载文件。计算哈希可以作为这个问题的答案;下载文件urllib
就足够了。