如何在Python中缓存POST请求
我在学习如何缓存网页请求。我在使用库 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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。