下载的文件的上次修改与它的HTTP头不匹配

2024-10-01 15:37:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段Python代码,它(无论好坏)对照web服务器上的同一个文件检查本地文件。如果它不在那里,它会下载它;如果它在那里,它会根据服务器上同一文件的HTTP报头检查下载文件的最后修改的os.stat。在

问题是,这两个数字似乎并不相等,即使它们应该是相等的。代码如下:

from urllib import urlretrieve
from urllib2 import Request, urlopen
from time import strftime, localtime, mktime, strptime
from os import stat, path

destFile = "logo3w.png"
srvFile = "http://www.google.com/images/srpr/logo3w.png"

if path.exists(destFile):
    localLastModified = stat(destFile).st_mtime
    req = Request(srvFile)
    url_handle = urlopen(req)
    headers = url_handle.info()                        
    srvLastModified = headers.getheader("Last-Modified")
    srvLastModified = mktime(strptime(srvLastModified,
      "%a, %d %b %Y %H:%M:%S GMT"))
    print localLastModified, srvLastModified

else:
    urlretrieve(srvFile, destFile)

print语句的返回值是1334527395.26 1333350817.0。在

在我看来,这两个应该是一样的,但他们大不相同。本地下载的文件的修改日期实际上是文件下载到本地计算机的日期,而不是服务器上最后一次修改的日期。在

基本上,我所要做的就是保存文件的本地缓存(实际应用程序中会有很多文件),必要时下载。我知道web代理在默认情况下应该这样做,我运行的是一个基本的WAMP服务器,存储这些文件,但我不确定如何将其应用于PyQt应用程序。可能有几十个文件需要下载和缓存,其中大约一半几乎不会更改,所以我正在尝试确定检查和获取这些文件的最快方法。在

也许这甚至不是正确的方法,所以我会全神贯注地听是否有(更好的/无数其他)方法来做到这一点。在


Tags: 文件方法代码fromimport服务器webos
1条回答
网友
1楼 · 发布于 2024-10-01 15:37:42

^{}只下载文件;它不复制修改日期。必须使用^{}手动执行此操作:

import os

# current code
else:
    headers = urlretrieve(srvFile, destFile)[1]
    lmStr = headers.getheader("Last-Modified")
    srvLastModified = mktime(strptime(lmStr, "%a, %d %b %Y %H:%M:%S GMT"))
    os.utime(destFile, (srvLastModified, srvLastModified))

相关问题 更多 >

    热门问题