我有一个非常奇怪的错误。我正在python3中编写一些代码,通过比较sha256哈希来检查URL的变化。代码的相关部分如下:
from requests import get
from hashlib import sha256
def fetch_and_hash(url):
file = get(url, stream=True)
f = file.raw.read()
hash = sha256()
hash.update(f)
return hash.hexdigest()
def check_url(target): # passed a dict containing hash from previous examination of url
t = deepcopy(target)
old_hash = t["hash"]
new_hash = fetch_and_hash(t["url"])
if old_hash == new_hash:
t["justchanged"] = False
return t
else:
t["justchanged"] = True
return handle_changes(t, new_hash) # records the changes
所以我在我的旧网页上测试了这个。我运行检查,记录哈希,然后更改页面。然后我重新运行了几次,上面的代码没有反映出新的哈希值(即它跟在old_hash == new_hash
分支之后)。
然后我等了5分钟并再次运行它而不更改代码,除了向print()
添加几个调试调用。而这一次,它奏效了。
当然,我的第一个想法是“嗯,请求必须保持缓存几秒钟。”但后来我用Google搜索并了解requests doesn't cache。
同样,除了打印调用之外,我更改了无代码。你可能不相信我。你可能会想“他必须改变别的东西。”但我没有!我可以证明这一点! Here's the commit!
那是什么给出的?有谁知道为什么会这样?如果重要的是,该网页托管在一个标准的商业托管服务,IIRC使用Apache,我在一个糟糕的本地电话公司DSL连接---不知道是否有任何服务器端缓存设置,但它是没有任何类型的CDN。
所以我试图弄清楚是否有一些神秘的ISP缓存事情正在发生,或者我在某种程度上滥用请求......我能处理的是前者;后者我需要修复!