如何在Python中缓存POST请求

后端开发 2026-07-08

我在学习如何缓存网页请求。我在使用库 requests-cache,当前版本1.3.2。我设法缓存了一个 GET 请求,使用这段代码:

from requests_cache import CachedSession

session = CachedSession('.cache')
session.get('https://httpbin.org/get')

我用下述命令验证确实把该响应存到了缓存中。它显示我已存储1 个响应:

sqlite3 .cache.sqlite 'select * from responses;' | wc --lines

但如果我用类似的代码尝试缓存一个 POST 请求,验证命令显示存储的响应为0:

from requests_cache import CachedSession

session = CachedSession('.cache')
session.post('https://httpbin.org/post')

如何让这段代码适用于 POST 请求?

解决方案

作为一个安全特性,requests-cache 已配置为仅缓存GET和 HEAD请求。请使用 allowable_methods 参数。

from requests_cache import CachedSession as cs

# include 'POST' in the allowed methods
session = cs('.cache', allowable_methods=['GET', 'POST'])

# this will now be stored in your cache
session.post('https://httpbin.org/post')

幕后原理:

当我们发出请求时,requests-cache会生成一个用于标识该特定请求的唯一缓存键 对于 get:该键通常仅基于URL和查询参数。

对于 post:该键会自动包含请求体/数据。如果对同一URL发送不同的请求体,它将被视为一个完全独立的缓存条目

警告:

如果在POST请求的请求体中发送敏感数据(例如密码、API密钥或个人信息),requests-cache将把这些原始数据存储在SQLite数据库中。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章