Brings support for async
/await
syntax to Python's fabulous requests
library.
Contributions towards closing off our outstanding issues would be very welcome! ✨ 🍰 ✨
- Python 3.6, 3.7.
$ pip install requests-async
Just use the standard requests API, but use await
for making requests.
Note: Use ipython
to try this from the console, since it supports await
.
import requests_async as requests
response = await requests.get('https://example.org')
print(response.status_code)
print(response.text)
Or use explicit sessions.
import requests_async as requests
with requests.Session() as session:
response = await session.get('https://example.org')
print(response.status_code)
print(response.text)
The requests_async
package subclasses requests
, so you're getting all the
standard behavior and API you'd expect.
In some situations, such as when you're testing a web application, you may not want to make actual outgoing network requests, but would prefer instead to mock out the endpoints.
You can do this using the ASGISession
, which allows you to plug into
any ASGI application, instead of making actual network requests.
import requests_async
# Create a mock service, with Starlette, Responder, Quart, FastAPI, Bocadillo,
# or any other ASGI web framework.
mock_app = ...
if TESTING:
# Issue requests to the the mock application.
requests = requests_async.ASGISession(mock_app)
else:
# Make live network requests.
requests = requests_async.Session()
You can also use ASGISession
as a test client for any ASGI application.
You'll probably want to install pytest
and pytest-asyncio
, or something
equivalent, to allow you to write async
test cases.
from requests_async import ASGISession
from myproject import app
import pytest
@pytest.mark.asyncio
async def test_homepage():
client = ASGISession(app)
response = await client.get("/")
assert response.status_code == 200
- Streaming uploads and downloads are unsupported.
- SSL verification is not currently enabled.
See the issues list for more details.
The aiohttp
package provides an alternative client for making async HTTP requests.