如何使用Python请求清除缓存?

eth*_*jyx 19 python python-requests

requestsPython包是否默认缓存数据?

例如,

import requests
resp = requests.get('https://some website')
Run Code Online (Sandbox Code Playgroud)

响应是否会被缓存?如果是,我该如何清除它?

jon*_*s77 14

添加'Cache-Control: no-cache'标题:

self.request = requests.get('http://google.com',
                            headers={'Cache-Control': 'no-cache'})
Run Code Online (Sandbox Code Playgroud)

  • 但是...如果“Python-requests”无论如何都不会缓存,为什么还要指定标头呢? (3认同)
  • 好问题,请参阅 /sf/answers/3892958051/ 以获得包含参考文献和链接的更完整答案。但是(有点猜测)缓存是 HTTP 工作原理的一部分,也许代理正在客户端和源服务器之间缓存某些内容。 (2认同)

小智 11

Python请求没有任何缓存功能.

但是,如果您需要它们,您可以查看请求缓存,尽管我从未使用它.

截至2018年,其最后一次发布是在2016年,因此似乎没有得到维护.


Luk*_*asa 5

默认情况下,请求不进行缓存。您可以使用CacheControl之类的东西轻松地将其插入。


Ped*_*ito 5

答案较晚,但是python请求 不会缓存请求,您应该使用标头 Cache-ControlPragma而改为:

import requests
headers = {
    ...
    "Cache-Control": "no-cache",
    "Pragma": "no-cache"
}
x = requests.get("site.tld", headers=headers)
...
Run Code Online (Sandbox Code Playgroud)

HTTP /标题

  • Cache-Control
    Cache-Control general-header字段用于为请求和响应中的缓存机制指定指令。高速缓存指令是单向的,这意味着请求中的给定指令并不意味着在响应中要给出相同的指令。

  • Pragma
    特定于实现的标头,可能在请求-响应链的任何地方产生各种影响。用于与尚不存在Cache-Control标头的HTTP / 1.0缓存向后兼容。


指示

  • no-cache
    强制缓存在释放缓存的副本之前将请求提交给原始服务器以进行验证。


注意Pragma

没有为HTTP响应指定Pragma,因此它不是常规HTTP / 1.1 Cache-Control标头的可靠替代,尽管它的行为与Cache-Control:no-cache相同,但如果在其中省略了Cache-Control标头字段,一个要求。仅将Pragma用于与HTTP / 1.0客户端向后兼容。

  • 客户端(python 请求)不会缓存请求,但服务器可能正在使用某种缓存,并且我们明确请求内容的_新鲜版本_。 (4认同)
  • 如果正如您所说,请求库不执行任何缓存,为什么需要指定标头来控制无论如何都不存在的行为? (3认同)