This release is a pre-release and may not be stable for production use.
Async http client/server framework
Key Features
Supports both client and server side of HTTP protocol.
Supports both client and server Web-Sockets out-of-the-box and avoids Callback Hell.
Provides Web-server with middlewares and pluggable routing.
Getting started
Client
To get something from the web:
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'http://python.org')
print(html)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Server
An example using a simple server:
# examples/server_simple.py
from aiohttp import web
async def handle(request):
name = request.match_info.get('name', "Anonymous")
text = "Hello, " + name
return web.Response(text=text)
async def wshandle(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
async for msg in ws:
if msg.type == web.WSMsgType.text:
await ws.send_str("Hello, {}".format(msg.data))
elif msg.type == web.WSMsgType.binary:
await ws.send_bytes(msg.data)
elif msg.type == web.WSMsgType.close:
break
return ws
app = web.Application()
app.add_routes([web.get('/', handle),
web.get('/echo', wshandle),
web.get('/{name}', handle)])
if __name__ == '__main__':
web.run_app(app)
Documentation
Demos
External links
Feel free to make a Pull Request for adding your link to these pages!
Communication channels
aio-libs google group: https://groups.google.com/forum/#!forum/aio-libs
Feel free to post your questions and ideas here.
gitter chat https://gitter.im/aio-libs/Lobby
We support Stack Overflow. Please add aiohttp tag to your question there.
Requirements
Python >= 3.5.3
Optionally you may install the cChardet and aiodns libraries (highly recommended for sake of speed).
License
aiohttp is offered under the Apache 2 license.
Keepsafe
The aiohttp community would like to thank Keepsafe (https://www.getkeepsafe.com) for its support in the early days of the project.
Source code
The latest developer version is available in a GitHub repository: https://github.com/aio-libs/aiohttp
Benchmarks
If you are interested in efficiency, the AsyncIO community maintains a list of benchmarks on the official wiki: https://github.com/python/asyncio/wiki/Benchmarks
Changelog
3.5.4 (2019-01-12)
Bugfixes
Fix stream .read() / .readany() / .iter_any() which used to return a partial content only in case of compressed content #3525
3.5.3 (2019-01-10)
Bugfixes
Fix type stubs for aiohttp.web.run_app(access_log=True) and fix edge case of access_log=True and the event loop being in debug mode. #3504
Fix aiohttp.ClientTimeout type annotations to accept None for fields #3511
Send custom per-request cookies even if session jar is empty #3515
Restore Linux binary wheels publishing on PyPI
3.5.2 (2019-01-08)
Features
Bugfixes
Preserve MultipartWriter parts headers on write.
Refactor the way how Payload.headers are handled. Payload instances now always have headers and Content-Type defined.
Fix Payload Content-Disposition header reset after initial creation. #3035
Log suppressed exceptions in GunicornWebWorker. #3464
Remove wildcard imports. #3468
Use the same task for app initialization and web server handling in gunicorn workers. It allows to use Python3.7 context vars smoothly. #3471
Fix handling of chunked+gzipped response when first chunk does not give uncompressed data #3477
Replace collections.MutableMapping with collections.abc.MutableMapping to avoid a deprecation warning. #3480
Payload.size type annotation changed from Optional[float] to Optional[int]. #3484
Ignore done tasks when cancels pending activities on web.run_app finalization. #3497
Improved Documentation
Add documentation for aiohttp.web.HTTPException. #3490
Misc
3.5.1 (2018-12-24)
Fix a regression about ClientSession._requote_redirect_url modification in debug mode.
3.5.0 (2018-12-22)
Features
The library type annotations are checked in strict mode now.
Add support for setting cookies for individual request (#2387)
Application.add_domain implementation (#2809)
The default app in the request returned by test_utils.make_mocked_request can now have objects assigned to it and retrieved using the [] operator. (#3174)
Make request.url accessible when transport is closed. (#3177)
Add zlib_executor_size argument to Response constructor to allow compression to run in a background executor to avoid blocking the main thread and potentially triggering health check failures. (#3205)
Enable users to set ClientTimeout in aiohttp.request (#3213)
Don’t raise a warning if NETRC environment variable is not set and ~/.netrc file doesn’t exist. (#3267)
Add default logging handler to web.run_app
If the Application.debug flag is set and the default logger aiohttp.access is used, access logs will now be output using a stderr StreamHandler if no handlers are attached. Furthermore, if the default logger has no log level set, the log level will be set to DEBUG. (#3324)
Add method argument to session.ws_connect().
Sometimes server API requires a different HTTP method for WebSocket connection establishment.
For example, Docker exec needs POST. (#3378)
Create a task per request handling. (#3406)
Bugfixes
Enable passing access_log_class via handler_args (#3158)
Return empty bytes with end-of-chunk marker in empty stream reader. (#3186)
Accept CIMultiDictProxy instances for headers argument in web.Response constructor. (#3207)
Don’t uppercase HTTP method in parser (#3233)
Make method match regexp RFC-7230 compliant (#3235)
Add app.pre_frozen state to properly handle startup signals in sub-applications. (#3237)
Enhanced parsing and validation of helpers.BasicAuth.decode. (#3239)
Change imports from collections module in preparation for 3.8. (#3258)
Ensure Host header is added first to ClientRequest to better replicate browser (#3265)
Fix forward compatibility with Python 3.8: importing ABCs directly from the collections module will not be supported anymore. (#3273)
Keep the query string by normalize_path_middleware. (#3278)
Fix missing parameter raise_for_status for aiohttp.request() (#3290)
Bracket IPv6 addresses in the HOST header (#3304)
Fix default message for server ping and pong frames. (#3308)
Fix tests/test_connector.py typo and tests/autobahn/server.py duplicate loop def. (#3337)
Fix false-negative indicator end_of_HTTP_chunk in StreamReader.readchunk function (#3361)
Release HTTP response before raising status exception (#3364)
Fix task cancellation when sendfile() syscall is used by static file handling. (#3383)
Fix stack trace for asyncio.TimeoutError which was not logged, when it is caught in the handler. (#3414)
Improved Documentation
Deprecations and Removals
Deprecate modification of session.requote_redirect_url (#2278)
Deprecate stream.unread_data() (#3260)
Deprecated use of boolean in resp.enable_compression() (#3318)
Encourage creation of aiohttp public objects inside a coroutine (#3331)
Drop dead Connection.detach() and Connection.writer. Both methods were broken for more than 2 years. (#3358)
Deprecate app.loop, request.loop, client.loop and connector.loop properties. (#3374)
Deprecate explicit debug argument. Use asyncio debug mode instead. (#3381)
Deprecate body parameter in HTTPException (and derived classes) constructor. (#3385)
Deprecate bare connector close, use async with connector: and await connector.close() instead. (#3417)
Deprecate obsolete read_timeout and conn_timeout in ClientSession constructor. (#3438)
Misc
#3341, #3351
Metadata
Release files for aiohttp 3.6.0a12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aiohttp-3.6.0a12.tar.gz | 1.1 MB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| aiohttp-3.6.0a12-py3-none-any.whl | Python 3 | none | any | Details |
| aiohttp-3.6.0a12-cp37-cp37m-win_amd64.whl | CPython 3.7 | CPython 3.7 pymalloc | Windows x86-64 | Details |
| aiohttp-3.6.0a12-cp37-cp37m-win32.whl | CPython 3.7 | CPython 3.7 pymalloc | Windows x86-32 | Details |
| aiohttp-3.6.0a12-cp37-cp37m-manylinux1_x86_64.whl | CPython 3.7 | CPython 3.7 pymalloc | Linux glibc 2.5+ x86-64 | Details |
| aiohttp-3.6.0a12-cp37-cp37m-manylinux1_i686.whl | CPython 3.7 | CPython 3.7 pymalloc | Linux glibc 2.5+ x86-32 | Details |
| aiohttp-3.6.0a12-cp36-cp36m-win_amd64.whl | CPython 3.6 | CPython 3.6 pymalloc | Windows x86-64 | Details |
| aiohttp-3.6.0a12-cp36-cp36m-win32.whl | CPython 3.6 | CPython 3.6 pymalloc | Windows x86-32 | Details |
| aiohttp-3.6.0a12-cp36-cp36m-manylinux1_x86_64.whl | CPython 3.6 | CPython 3.6 pymalloc | Linux glibc 2.5+ x86-64 | Details |
| aiohttp-3.6.0a12-cp36-cp36m-manylinux1_i686.whl | CPython 3.6 | CPython 3.6 pymalloc | Linux glibc 2.5+ x86-32 | Details |
| aiohttp-3.6.0a12-cp35-cp35m-win_amd64.whl | CPython 3.5 | CPython 3.5 pymalloc | Windows x86-64 | Details |
| aiohttp-3.6.0a12-cp35-cp35m-win32.whl | CPython 3.5 | CPython 3.5 pymalloc | Windows x86-32 | Details |
| aiohttp-3.6.0a12-cp35-cp35m-manylinux1_x86_64.whl | CPython 3.5 | CPython 3.5 pymalloc | Linux glibc 2.5+ x86-64 | Details |
| aiohttp-3.6.0a12-cp35-cp35m-manylinux1_i686.whl | CPython 3.5 | CPython 3.5 pymalloc | Linux glibc 2.5+ x86-32 | Details |
Total release size: 11.7 MB
Release files / aiohttp-3.6.0a12.tar.gz
| Download URL | aiohttp-3.6.0a12.tar.gz |
|---|---|
| Size | 1.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
74c33b3952b5593c9f029cbf3e250a434d8a53c2ad2ef03cf0165ea3b7c20d39
|
|
BLAKE2b-256 checksum How to use checksums |
b827f8b6e9cf66189ac452a66b05aa387370a7c57edb38b7d4459cace126a585
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.5.4
|
Release files / aiohttp-3.6.0a12-py3-none-any.whl
| Download URL | aiohttp-3.6.0a12-py3-none-any.whl |
|---|---|
| Size | 189.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8c8ab1007db37fc21a268314298e217c356f563e62643895016b1fd386f652ea
|
|
BLAKE2b-256 checksum How to use checksums |
eb155aa7b56562cd6099e39965c520892af559ef82dabfee58dc03594117a6bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.3
|
Release files / aiohttp-3.6.0a12-cp37-cp37m-win_amd64.whl
| Download URL | aiohttp-3.6.0a12-cp37-cp37m-win_amd64.whl |
|---|---|
| Size | 615.8 kB |
| Tags | CPython 3.7 CPython 3.7 pymalloc Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9f56b968648ccab736635a419db3610f622a9ef57cf23ff738e8f400bbccd195
|
|
BLAKE2b-256 checksum How to use checksums |
368fc86c9a50280da758ea9d60124b828c1f8515e1de465ddd858c02071c04eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.4
|
Release files / aiohttp-3.6.0a12-cp37-cp37m-win32.whl
| Download URL | aiohttp-3.6.0a12-cp37-cp37m-win32.whl |
|---|---|
| Size | 588.1 kB |
| Tags | CPython 3.7 CPython 3.7 pymalloc Windows x86-32 |
|
SHA-256 checksum How to use checksums |
8dc351b9d7fde0b28e98bbbe26af1283888cac40b85487d71cb9ab1a2782d11e
|
|
BLAKE2b-256 checksum How to use checksums |
63c98620091021b08ca11014d82f39001ab004a80c4a6e8defcdcb3477ed826a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.4
|
Release files / aiohttp-3.6.0a12-cp37-cp37m-manylinux1_x86_64.whl
| Download URL | aiohttp-3.6.0a12-cp37-cp37m-manylinux1_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
ae6e074cb535174b6e2a2d4577c3268357da6fb72a0213bb4cc3a5b19d27433a
|
|
BLAKE2b-256 checksum How to use checksums |
b5f9a03cb17c6d366c83c04afd1484cea88d4d37fd76f605ddcecfa492d9c8ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1
|
Release files / aiohttp-3.6.0a12-cp37-cp37m-manylinux1_i686.whl
| Download URL | aiohttp-3.6.0a12-cp37-cp37m-manylinux1_i686.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
38810dabd6552108a10eae6fcdfd42bf65f6bf35d390a345bdba896f66317c96
|
|
BLAKE2b-256 checksum How to use checksums |
4f8c5a453c93c2fab5d31b6fd4ac38afe8e5b37886be48e91fbe9d8970a84031
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1
|
Release files / aiohttp-3.6.0a12-cp36-cp36m-win_amd64.whl
| Download URL | aiohttp-3.6.0a12-cp36-cp36m-win_amd64.whl |
|---|---|
| Size | 615.7 kB |
| Tags | CPython 3.6 CPython 3.6 pymalloc Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d0d61938da1f6e7ebaa35bc4da266131c607e16404801ebba3d3c22059babdbe
|
|
BLAKE2b-256 checksum How to use checksums |
7b74784194455be1199e2e0d3bc6f6eae1aed1002ba5ec3ae0ef72cd24529ecd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.8
|
Release files / aiohttp-3.6.0a12-cp36-cp36m-win32.whl
| Download URL | aiohttp-3.6.0a12-cp36-cp36m-win32.whl |
|---|---|
| Size | 588.0 kB |
| Tags | CPython 3.6 CPython 3.6 pymalloc Windows x86-32 |
|
SHA-256 checksum How to use checksums |
0bd57e084c5e4623793cabd75eff06abe543bb1a462796e71dc6eee99a761215
|
|
BLAKE2b-256 checksum How to use checksums |
dfccf8ce97e071688ed0fdbf579de4b7204381792d199cad66de6a013ef1c0ed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.8
|
Release files / aiohttp-3.6.0a12-cp36-cp36m-manylinux1_x86_64.whl
| Download URL | aiohttp-3.6.0a12-cp36-cp36m-manylinux1_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
f18e7c4630f2dea0932c904470b07943e26c64584be6cc476ad9a0e60f2d4998
|
|
BLAKE2b-256 checksum How to use checksums |
b5380a1db9f7c5ded27d18570129639d5169668514056a30cb3f7cb88a97fe4a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1
|
Release files / aiohttp-3.6.0a12-cp36-cp36m-manylinux1_i686.whl
| Download URL | aiohttp-3.6.0a12-cp36-cp36m-manylinux1_i686.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
e1a68dde3131eaddcb801aa987844091496c62d984a863ff50aa5bb6ff3ff181
|
|
BLAKE2b-256 checksum How to use checksums |
f847dd3e30f4b36ac84a8f197be38671023b929e9d11ea7f510e38ae927e85f0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1
|
Release files / aiohttp-3.6.0a12-cp35-cp35m-win_amd64.whl
| Download URL | aiohttp-3.6.0a12-cp35-cp35m-win_amd64.whl |
|---|---|
| Size | 610.1 kB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Windows x86-64 |
|
SHA-256 checksum How to use checksums |
c1f5ecd39062e5b5a807f02a15136d87b19d647f5f3d0af92afc1dc4748ca396
|
|
BLAKE2b-256 checksum How to use checksums |
39f7c61600fd18aac22f9e0cc55f8055957610e2fbdbb671b3e3b8950468ad48
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.5.4
|
Release files / aiohttp-3.6.0a12-cp35-cp35m-win32.whl
| Download URL | aiohttp-3.6.0a12-cp35-cp35m-win32.whl |
|---|---|
| Size | 582.1 kB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Windows x86-32 |
|
SHA-256 checksum How to use checksums |
eb5603b7fd4b58b21604ff10de804e983698ee1f47d0760dfce327f12f511149
|
|
BLAKE2b-256 checksum How to use checksums |
0f7bd55eb379f4bc7224f414f024b5f2e103663f21ce9b375414d42908de5c05
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.5.4
|
Release files / aiohttp-3.6.0a12-cp35-cp35m-manylinux1_x86_64.whl
| Download URL | aiohttp-3.6.0a12-cp35-cp35m-manylinux1_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
b721433b628fa73689d6213c30014fd7e555e15654f0f2dcae7319b4840ef967
|
|
BLAKE2b-256 checksum How to use checksums |
0935c5a2d06dca8e2d6fee00e47dc43a9328a2c1419ff5696a2ff0ad2ff5da21
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1
|
Release files / aiohttp-3.6.0a12-cp35-cp35m-manylinux1_i686.whl
| Download URL | aiohttp-3.6.0a12-cp35-cp35m-manylinux1_i686.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
c629e0667136d988095b12a3471b292d684875a4d9dc1351f51fabec4bfb7444
|
|
BLAKE2b-256 checksum How to use checksums |
0e8c42cd82738bf3e906601fe1f9859c0ead62ddb47eb8b7d39456afc6229585
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1
|