A transparent persistent cache for the requests library
requests-cache is a transparent, persistent cache that provides an easy way to get better performance with the python requests library.
Complete project documentation can be found at requests-cache.readthedocs.io.
- 🍰 Ease of use: Keep using the
requestslibrary you're already familiar with. Add caching with a drop-in replacement for
requests.Session, or install globally to add caching to all
- 🚀 Performance: Get sub-millisecond response times for cached responses. When they expire, you still save time with conditional requests.
- 💾 Persistence: Works with several storage backends including SQLite, Redis, MongoDB, and DynamoDB; or save responses as plain JSON files, YAML, and more
- ⚙️ Customization: Works out of the box with zero config, but with a robust set of features for configuring and extending the library to suit your needs
- 🕗 Expiration: Keep your cache fresh using Cache-Control, eagerly cache everything for long-term storage, use URL patterns for selective caching, or any combination of strategies
- ✔️ Compatibility: Can be combined with other popular libraries based on requests
First, install with pip:
pip install requests-cache
To illustrate, we'll call an endpoint that adds a delay of 1 second, simulating a slow or rate-limited website.
This takes 1 minute:
import requests session = requests.Session() for i in range(60): session.get('http://httpbin.org/delay/1')
This takes 1 second:
import requests_cache session = requests_cache.CachedSession('demo_cache') for i in range(60): session.get('http://httpbin.org/delay/1')
With caching, the response will be fetched once, saved to
demo_cache.sqlite, and subsequent
requests will return the cached response near-instantly.
If you don't want to manage a session object, or just want to quickly test it out in your application without modifying any code, requests-cache can also be installed globally, and all requests will be transparently cached:
import requests import requests_cache requests_cache.install_cache('demo_cache') requests.get('http://httpbin.org/delay/1')
A quick example of some of the options available:
# fmt: off from datetime import timedelta from requests_cache import CachedSession session = CachedSession( 'demo_cache', use_cache_dir=True, # Save files in the default user cache dir cache_control=True, # Use Cache-Control headers for expiration, if available expire_after=timedelta(days=1), # Otherwise expire responses after one day allowable_methods=['GET', 'POST'], # Cache POST requests to avoid sending the same data twice allowable_codes=[200, 400], # Cache 400 responses as a solemn reminder of your failures ignored_parameters=['api_key'], # Don't match this param or save it in the cache match_headers=True, # Match all request headers stale_if_error=True, # In case of request errors, use stale cache data if possible )
To find out more about what you can do with requests-cache, see:
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Hashes for requests_cache-0.9.1-py3-none-any.whl