This release is a pre-release and may not be stable for production use.
Async http client/server framework
Features
Supports both client and server side of HTTP protocol.
Supports both client and server Web-Sockets out-of-the-box.
Web-server has middlewares and pluggable routing.
Getting started
Client
To retrieve something from the web:
import aiohttp
import asyncio
import async_timeout
async def fetch(session, url):
with async_timeout.timeout(10):
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
This is simple usage example:
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 wshandler(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
async for msg in ws:
if msg.type == web.MsgType.text:
await ws.send_str("Hello, {}".format(msg.data))
elif msg.type == web.MsgType.binary:
await ws.send_bytes(msg.data)
elif msg.type == web.MsgType.close:
break
return ws
app = web.Application()
app.router.add_get('/echo', wshandler)
app.router.add_get('/', handle)
app.router.add_get('/{name}', handle)
web.run_app(app)
Note: examples are written for Python 3.5+ and utilize PEP-492 aka async/await. If you are using Python 3.4 please replace await with yield from and async def with @coroutine e.g.:
async def coro(...):
ret = await f()
should be replaced by:
@asyncio.coroutine
def coro(...):
ret = yield from f()
Documentation
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.4.2
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 it’s 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 by efficiency, AsyncIO community maintains a list of benchmarks on the official wiki: https://github.com/python/asyncio/wiki/Benchmarks
Changes
2.2.5 (2017-08-03)
Don’t raise deprecation warning on loop.run_until_complete(client.close()) (#2065)
2.2.4 (2017-08-02)
Fix issue with synchronous session closing when using ClientSession as an asynchronous context manager. (#2063)
2.2.3 (2017-07-04)
Fix _CoroGuard for python 3.4
2.2.2 (2017-07-03)
Allow await session.close() along with yield from session.close()
2.2.1 (2017-07-02)
Relax yarl requirement to 0.11+
Backport #2026: session.close is a coroutine (#2029)
2.2.0 (2017-06-20)
Add doc for add_head, update doc for add_get. (#1944)
Fixed consecutive calls for Response.write_eof.
Retain method attributes (e.g.
__doc__) when registering synchronous handlers for resources. (#1953)Added signal TERM handling in run_app to gracefully exit (#1932)
Fix websocket issues caused by frame fragmentation. (#1962)
Raise RuntimeError is you try to set the Content Length and enable chunked encoding at the same time (#1941)
Small update for unittest_run_loop
Use CIMultiDict for ClientRequest.skip_auto_headers (#1970)
Fix wrong startup sequence: test server and run_app() are not raise DeprecationWarning now (#1947)
Make sure cleanup signal is sent if startup signal has been sent (#1959)
Fixed server keep-alive handler, could cause 100% cpu utilization (#1955)
Connection can be destroyed before response get processed if await aiohttp.request(..) is used (#1981)
MultipartReader does not work with -OO (#1969)
Fixed ClientPayloadError with blank Content-Encoding header (#1931)
Support deflate encoding implemented in httpbin.org/deflate (#1918)
Fix BadStatusLine caused by extra CRLF after POST data (#1792)
Keep a reference to ClientSession in response object (#1985)
Deprecate undocumented app.on_loop_available signal (#1978)
2.1.0 (2017-05-26)
Added support for experimental async-tokio event loop written in Rust https://github.com/PyO3/tokio
Write to transport \r\n before closing after keepalive timeout, otherwise client can not detect socket disconnection. (#1883)
Only call loop.close in run_app if the user did not supply a loop. Useful for allowing clients to specify their own cleanup before closing the asyncio loop if they wish to tightly control loop behavior
Content disposition with semicolon in filename (#917)
Added request_info to response object and ClientResponseError. (#1733)
Added history to ClientResponseError. (#1741)
Allow to disable redirect url re-quoting (#1474)
Handle RuntimeError from transport (#1790)
Dropped “%O” in access logger (#1673)
Added args and kwargs to unittest_run_loop. Useful with other decorators, for example @patch. (#1803)
Added iter_chunks to response.content object. (#1805)
Avoid creating TimerContext when there is no timeout to allow compatibility with Tornado. (#1817) (#1180)
Add proxy_from_env to ClientRequest to read from environment variables. (#1791)
Add DummyCookieJar helper. (#1830)
Fix assertion errors in Python 3.4 from noop helper. (#1847)
Do not unquote + in match_info values (#1816)
Use Forwarded, X-Forwarded-Scheme and X-Forwarded-Host for better scheme and host resolution. (#1134)
Fix sub-application middlewares resolution order (#1853)
Fix applications comparison (#1866)
Fix static location in index when prefix is used (#1662)
Make test server more reliable (#1896)
Extend list of web exceptions, add HTTPUnprocessableEntity, HTTPFailedDependency, HTTPInsufficientStorage status codes (#1920)
2.0.7 (2017-04-12)
Fix pypi distribution
Fix exception description (#1807)
Handle socket error in FileResponse (#1773)
Cancel websocket heartbeat on close (#1793)
2.0.6 (2017-04-04)
Keeping blank values for request.post() and multipart.form() (#1765)
TypeError in data_received of ResponseHandler (#1770)
Fix web.run_app not to bind to default host-port pair if only socket is passed (#1786)
2.0.5 (2017-03-29)
Memory leak with aiohttp.request (#1756)
Disable cleanup closed ssl transports by default.
Exception in request handling if the server responds before the body is sent (#1761)
2.0.4 (2017-03-27)
Memory leak with aiohttp.request (#1756)
Encoding is always UTF-8 in POST data (#1750)
Do not add “Content-Disposition” header by default (#1755)
2.0.3 (2017-03-24)
Call https website through proxy will cause error (#1745)
Fix exception on multipart/form-data post if content-type is not set (#1743)
2.0.2 (2017-03-21)
Fixed Application.on_loop_available signal (#1739)
Remove debug code
2.0.1 (2017-03-21)
Fix allow-head to include name on route (#1737)
Fixed AttributeError in WebSocketResponse.can_prepare (#1736)
2.0.0 (2017-03-20)
Added json to ClientSession.request() method (#1726)
Added session’s raise_for_status parameter, automatically calls raise_for_status() on any request. (#1724)
response.json() raises ClientReponseError exception if response’s content type does not match (#1723)
Cleanup timer and loop handle on any client exception.
Deprecate loop parameter for Application’s constructor
2.0.0rc1 (2017-03-15)
Properly handle payload errors (#1710)
Added ClientWebSocketResponse.get_extra_info() (#1717)
It is not possible to combine Transfer-Encoding and chunked parameter, same for compress and Content-Encoding (#1655)
Connector’s limit parameter indicates total concurrent connections. New limit_per_host added, indicates total connections per endpoint. (#1601)
Use url’s raw_host for name resolution (#1685)
Change ClientResponse.url to yarl.URL instance (#1654)
Add max_size parameter to web.Request reading methods (#1133)
Web Request.post() stores data in temp files (#1469)
Add the allow_head=True keyword argument for add_get (#1618)
run_app and the Command Line Interface now support serving over Unix domain sockets for faster inter-process communication.
run_app now supports passing a preexisting socket object. This can be useful e.g. for socket-based activated applications, when binding of a socket is done by the parent process.
Implementation for Trailer headers parser is broken (#1619)
Fix FileResponse to not fall on bad request (range out of file size)
Fix FileResponse to correct stream video to Chromes
Deprecate public low-level api (#1657)
Deprecate encoding parameter for ClientSession.request() method
Dropped aiohttp.wsgi (#1108)
Dropped version from ClientSession.request() method
Dropped websocket version 76 support (#1160)
Dropped: aiohttp.protocol.HttpPrefixParser (#1590)
Dropped: Servers response’s .started, .start() and .can_start() method (#1591)
Dropped: Adding sub app via app.router.add_subapp() is deprecated use app.add_subapp() instead (#1592)
Dropped: Application.finish() and Application.register_on_finish() (#1602)
Dropped: web.Request.GET and web.Request.POST
Dropped: aiohttp.get(), aiohttp.options(), aiohttp.head(), aiohttp.post(), aiohttp.put(), aiohttp.patch(), aiohttp.delete(), and aiohttp.ws_connect() (#1593)
Dropped: aiohttp.web.WebSocketResponse.receive_msg() (#1605)
Dropped: ServerHttpProtocol.keep_alive_timeout attribute and keep-alive, keep_alive_on, timeout, log constructor parameters (#1606)
Dropped: TCPConnector’s` .resolve, .resolved_hosts, .clear_resolved_hosts() attributes and resolve constructor parameter (#1607)
Dropped ProxyConnector (#1609)
Release files for aiohttp 2.3.0a4
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-2.3.0a4.tar.gz | 585.4 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| aiohttp-2.3.0a4-cp36-cp36m-win_amd64.whl | CPython 3.6 | CPython 3.6 pymalloc | Windows x86-64 | Details |
| aiohttp-2.3.0a4-cp36-cp36m-win32.whl | CPython 3.6 | CPython 3.6 pymalloc | Windows x86-32 | Details |
| aiohttp-2.3.0a4-cp36-cp36m-manylinux1_x86_64.whl | CPython 3.6 | CPython 3.6 pymalloc | Linux glibc 2.5+ x86-64 | Details |
| aiohttp-2.3.0a4-cp36-cp36m-manylinux1_i686.whl | CPython 3.6 | CPython 3.6 pymalloc | Linux glibc 2.5+ x86-32 | Details |
| aiohttp-2.3.0a4-cp35-cp35m-win_amd64.whl | CPython 3.5 | CPython 3.5 pymalloc | Windows x86-64 | Details |
| aiohttp-2.3.0a4-cp35-cp35m-win32.whl | CPython 3.5 | CPython 3.5 pymalloc | Windows x86-32 | Details |
| aiohttp-2.3.0a4-cp35-cp35m-manylinux1_x86_64.whl | CPython 3.5 | CPython 3.5 pymalloc | Linux glibc 2.5+ x86-64 | Details |
| aiohttp-2.3.0a4-cp35-cp35m-manylinux1_i686.whl | CPython 3.5 | CPython 3.5 pymalloc | Linux glibc 2.5+ x86-32 | Details |
| aiohttp-2.3.0a4-cp34-cp34m-win_amd64.whl | CPython 3.4 | CPython 3.4 pymalloc | Windows x86-64 | Details |
| aiohttp-2.3.0a4-cp34-cp34m-win32.whl | CPython 3.4 | CPython 3.4 pymalloc | Windows x86-32 | Details |
| aiohttp-2.3.0a4-cp34-cp34m-manylinux1_x86_64.whl | CPython 3.4 | CPython 3.4 pymalloc | Linux glibc 2.5+ x86-64 | Details |
| aiohttp-2.3.0a4-cp34-cp34m-manylinux1_i686.whl | CPython 3.4 | CPython 3.4 pymalloc | Linux glibc 2.5+ x86-32 | Details |
Total release size:6.5 MB
Release files / aiohttp-2.3.0a4.tar.gz
| Download URL | aiohttp-2.3.0a4.tar.gz |
|---|---|
| Size | 585.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c8adb7b6131a7444ea542d7b1e75e89f7ebbcd48ffacb6f527028a0b6b3bf937
|
|
BLAKE2b-256 checksum How to use checksums |
d760af44588ecc281733870b0a91555b69883aab9178d970def69fb57e632247
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-2.3.0a4-cp36-cp36m-win_amd64.whl
| Download URL | aiohttp-2.3.0a4-cp36-cp36m-win_amd64.whl |
|---|---|
| Size | 363.3 kB |
| Tags | CPython 3.6 CPython 3.6 pymalloc Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9ab72d17aa585bc06cd24917710a4adbc1a7d80bb0fdbad6c6d27e427cb989d6
|
|
BLAKE2b-256 checksum How to use checksums |
c77d13e7f6fcda938b65a0068ee9861a9a71265656aed30db450401029b20cff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-2.3.0a4-cp36-cp36m-win32.whl
| Download URL | aiohttp-2.3.0a4-cp36-cp36m-win32.whl |
|---|---|
| Size | 352.1 kB |
| Tags | CPython 3.6 CPython 3.6 pymalloc Windows x86-32 |
|
SHA-256 checksum How to use checksums |
99beb63631a87a2c205a2828fddf35486e977b76a4e19274d98b2d11e06f2ecd
|
|
BLAKE2b-256 checksum How to use checksums |
0e46a0ae472df4335383966d8a660564c6d648505e736adc4ae0dda688533b90
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-2.3.0a4-cp36-cp36m-manylinux1_x86_64.whl
| Download URL | aiohttp-2.3.0a4-cp36-cp36m-manylinux1_x86_64.whl |
|---|---|
| Size | 655.5 kB |
| Tags | CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
917d71a99f35ceb28b26cb14a21bd8c01660e8a63bdb1600271b93d52aeed797
|
|
BLAKE2b-256 checksum How to use checksums |
22b4565faf69b1f88e3993319d80254634e6365141598ab3e9308f585190d3c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-2.3.0a4-cp36-cp36m-manylinux1_i686.whl
| Download URL | aiohttp-2.3.0a4-cp36-cp36m-manylinux1_i686.whl |
|---|---|
| Size | 627.8 kB |
| Tags | CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
c601b3af0ae6d2a997158ea485c0b6a97f6b301ccb12e263bb12dbbca3429fd5
|
|
BLAKE2b-256 checksum How to use checksums |
0ee1128acb80d8a1eeb78c237caf81b6424202afe8eb4ad8c8fabc874669386a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-2.3.0a4-cp35-cp35m-win_amd64.whl
| Download URL | aiohttp-2.3.0a4-cp35-cp35m-win_amd64.whl |
|---|---|
| Size | 361.5 kB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b38fd7d780419a9dc768a917536229ce10ed911f1f6f4b0e781ae019cf09bc6b
|
|
BLAKE2b-256 checksum How to use checksums |
be27ab223df951455218528a1acc73f0c77c69ff46cf719de887c031cdb86a9c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-2.3.0a4-cp35-cp35m-win32.whl
| Download URL | aiohttp-2.3.0a4-cp35-cp35m-win32.whl |
|---|---|
| Size | 350.5 kB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Windows x86-32 |
|
SHA-256 checksum How to use checksums |
354426c524bc37d4b6496132acf7c4ce8baa2c5442c02ee9400a3cb81c8e76ee
|
|
BLAKE2b-256 checksum How to use checksums |
26a77bb00f7b1d4ded4b06854278985175dfd0e513e279fcbc415e7a5f32164d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-2.3.0a4-cp35-cp35m-manylinux1_x86_64.whl
| Download URL | aiohttp-2.3.0a4-cp35-cp35m-manylinux1_x86_64.whl |
|---|---|
| Size | 641.1 kB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
07713924ad7bb441cc3630496b2b4729504d8c945cd93fef0d2350769d0872ff
|
|
BLAKE2b-256 checksum How to use checksums |
3f212703e125dbabc31b157264720abb19f65568df0c172c5350eec3dde43b9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-2.3.0a4-cp35-cp35m-manylinux1_i686.whl
| Download URL | aiohttp-2.3.0a4-cp35-cp35m-manylinux1_i686.whl |
|---|---|
| Size | 611.6 kB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
cc5a2638c3771c4d3a446bebd7e8965cd75a2b5861cd71500de9da3ec731b9ed
|
|
BLAKE2b-256 checksum How to use checksums |
8ad85ac7411208a95086208fe2e555b42c30b4f7732064fe882e6dada107fce7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-2.3.0a4-cp34-cp34m-win_amd64.whl
| Download URL | aiohttp-2.3.0a4-cp34-cp34m-win_amd64.whl |
|---|---|
| Size | 356.9 kB |
| Tags | CPython 3.4 CPython 3.4 pymalloc Windows x86-64 |
|
SHA-256 checksum How to use checksums |
22960731ec358e3c217361f4ea7dbbcf1e2fb4bace8349d8cbb259351ef24f1d
|
|
BLAKE2b-256 checksum How to use checksums |
84238aee4c040e77bc542830029fcb77cfdc42e2ae5940f27a2286b7511c112e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-2.3.0a4-cp34-cp34m-win32.whl
| Download URL | aiohttp-2.3.0a4-cp34-cp34m-win32.whl |
|---|---|
| Size | 350.1 kB |
| Tags | CPython 3.4 CPython 3.4 pymalloc Windows x86-32 |
|
SHA-256 checksum How to use checksums |
c74e76778eaca0ac55b9eb1a06eacfdf628a3408e572f9829d0c5d442e41dc86
|
|
BLAKE2b-256 checksum How to use checksums |
5edff9c58d89a4342326ec5f6284156d72974d28b3f09b9d3122594efb75042f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-2.3.0a4-cp34-cp34m-manylinux1_x86_64.whl
| Download URL | aiohttp-2.3.0a4-cp34-cp34m-manylinux1_x86_64.whl |
|---|---|
| Size | 647.6 kB |
| Tags | CPython 3.4 CPython 3.4 pymalloc Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
a2af3929b363eca8b8814b45003967ea7d10d6fb783c4c2de3200bc9550fda45
|
|
BLAKE2b-256 checksum How to use checksums |
d41b5f6262601f842a8a2b697cb0327925c5b4e144cac9599cbc5bd462841a92
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-2.3.0a4-cp34-cp34m-manylinux1_i686.whl
| Download URL | aiohttp-2.3.0a4-cp34-cp34m-manylinux1_i686.whl |
|---|---|
| Size | 621.6 kB |
| Tags | CPython 3.4 CPython 3.4 pymalloc Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
dad4fc7e84b8622bfb01fdf06701bed12d51a8058df8c139ed770b417dc040c0
|
|
BLAKE2b-256 checksum How to use checksums |
9043a431bee0903f36a44c291f32456dff11436ba5271869cee28cba6252924e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |