gpt4 book ai didi

Python:使用 'CacheControl` 的 HTTP 缓存不起作用

转载 作者:可可西里 更新时间:2023-11-01 16:13:29 25 4
gpt4 key购买 nike

我使用 python 3.6 和用于 API 使用的 requests 模块和用于缓存 API 响应的 CacheControl 模块。我正在使用以下代码,但缓存似乎不起作用:

import requests
from cachecontrol import CacheControl

sess = requests.session()
cached_sess = CacheControl(sess)

response = cached_sess.get('https://jsonplaceholder.typicode.com/users')

对该 URL 的每个请求都会返回 200 状态代码(而不是 304 状态代码)并且每次请求相同的资源,即使 ETag header 相同并且 max-age 仍然有效。 API 返回以下与缓存相关的 header :

'Cache-Control': 'public, max-age=14400'
'Expires': 'Sat, 04 Feb 2017 22:23:28 GMT' (time of original request)
'Etag': 'W/"160d-MxiAGkI3ZBrjm0xiEDfwqw"'

这可能是什么问题?

更新:我不会通过任何 API 调用发送 If-None-Match header ,我必须手动发送还是 CacheControl 模块应该自动处理它?<​​/p>

最佳答案

使用缓存实现在程序运行之间保留缓存。

from cachecontrol.caches import FileCache

sess = requests.session()
cached_sess = CacheControl(sess, cache = FileCache('.web_cache'))

此外,请确保您使用的是最新的 CacheControl 版本。 CacheControl 只有 cached resources served as Transfer-Encoding: chunked从 0.11.7 开始:

$ curl -si https://jsonplaceholder.typicode.com/users | fgrep -i transfer-encoding
Transfer-Encoding: chunked

Every request to this URL returns the 200 status code

这是当 CacheControl 正常工作时您将看到的内容。作为代码的客户端,缓存响应的返回或 304 的使用对您是隐藏的。如果您认为正在向上游服务器发出新请求,请考虑类似以下内容:

import logging

logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)

看看 cachecontrol.controllerrequests.packages.urllib3.connectionpool 在做什么。

关于Python:使用 'CacheControl` 的 HTTP 缓存不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42044094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com