http client/server for asyncio
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
async def fetch(session, url):
with aiohttp.Timeout(10, loop=session.loop):
async with session.get(url) as response:
return await response.text()
async def main(loop):
async with aiohttp.ClientSession(loop=loop) as session:
html = await fetch(session, 'http://python.org')
print(html)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))
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:
ws.send_str("Hello, {}".format(msg.data))
elif msg.type == web.MsgType.binary:
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
Discussion list
aio-libs google group: https://groups.google.com/forum/#!forum/aio-libs
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.
Source code
The latest developer version is available in a github repository: https://github.com/KeepSafe/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
1.1.0 (2016-11-03)
Drop deprecated WSClientDisconnectedError (BACKWARD INCOMPATIBLE)
Use yarl.URL in client API. The change is 99% backward compatible but ClientResponse.url is an yarl.URL instance now. #1217
Close idle keep-alive connections on shutdown #1222
Modify regex in AccessLogger to accept underscore and numbers #1225
Use yarl.URL in web server API. web.Request.rel_url and web.Request.url are added. URLs and templates are percent-encoded now. #1224
Accept yarl.URL by server redirections #1278
Return yarl.URL by .make_url() testing utility #1279
Properly format IPv6 addresses by aiohttp.web.run_app #1139
Use yarl.URL by server API #1288
Introduce resource.url_for(), deprecate resource.url().
Implement StaticResource.
Inherit SystemRoute from AbstractRoute
Drop old-style routes: Route, PlainRoute, DynamicRoute, StaticRoute, ResourceAdapter.
Revert resp.url back to str, introduce resp.url_obj #1292
Raise ValueError if BasicAuth login has a “:” character #1307
Fix bug when ClientRequest send payload file with opened as open(‘filename’, ‘r+b’) #1306
Enhancement to AccessLogger (pass extra dict) #1303
Show more verbose message on import errors #1319
Added save and load functionality for CookieJar #1219
Added option on StaticRoute to follow symlinks #1299
Force encoding of application/json content type to utf-8 #1339
Fix invalid invocations of errors.LineTooLong #1335
Websockets: Stop async for iteration when connection is closed #1144
Ensure TestClient HTTP methods return a context manager #1318
Raise ClientDisconnectedError to FlowControlStreamReader read function if ClientSession object is closed by client when reading data. #1323
Document deployment without Gunicorn #1120
Add deprecation warning for MD5 and SHA1 digests when used for fingerprint of site certs in TCPConnector. #1186
Implement sub-applications #1301
Don’t inherit web.Request from dict but implement MutableMapping protocol.
Implement frozen signals
Don’t inherit web.Application from dict but implement MutableMapping protocol.
Support freezing for web applications
Accept access_log parameter in web.run_app, use None to disable logging
Don’t flap tcp_cork and tcp_nodelay in regular request handling. tcp_nodelay is still enabled by default.
Improve performance of web server by removing premature computing of Content-Type if the value was set by web.Response constructor.
While the patch boosts speed of trivial web.Response(text=’OK’, content_type=’text/plain) very well please don’t expect significant boost of your application – a couple DB requests and business logic is still the main bottleneck.
Boost performance by adding a custom time service #1350
Extend ClientResponse with content_type and charset properties like in web.Request. #1349
Disable aiodns by default #559
Don’t flap tcp_cork in client code, use TCP_NODELAY mode by default.
Implement web.Request.clone() #1361
Metadata
Release files for aiohttp 1.1.0
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-1.1.0.tar.gz | 508.5 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| aiohttp-1.1.0-cp35-cp35m-win_amd64.whl | CPython 3.5 | CPython 3.5 pymalloc | Windows x86-64 | Details |
| aiohttp-1.1.0-cp35-cp35m-win32.whl | CPython 3.5 | CPython 3.5 pymalloc | Windows x86-32 | Details |
| aiohttp-1.1.0-cp35-cp35m-manylinux1_x86_64.whl | CPython 3.5 | CPython 3.5 pymalloc | Linux glibc 2.5+ x86-64 | Details |
| aiohttp-1.1.0-cp35-cp35m-manylinux1_i686.whl | CPython 3.5 | CPython 3.5 pymalloc | Linux glibc 2.5+ x86-32 | Details |
| aiohttp-1.1.0-cp34-cp34m-win_amd64.whl | CPython 3.4 | CPython 3.4 pymalloc | Windows x86-64 | Details |
| aiohttp-1.1.0-cp34-cp34m-win32.whl | CPython 3.4 | CPython 3.4 pymalloc | Windows x86-32 | Details |
| aiohttp-1.1.0-cp34-cp34m-manylinux1_x86_64.whl | CPython 3.4 | CPython 3.4 pymalloc | Linux glibc 2.5+ x86-64 | Details |
| aiohttp-1.1.0-cp34-cp34m-manylinux1_i686.whl | CPython 3.4 | CPython 3.4 pymalloc | Linux glibc 2.5+ x86-32 | Details |
Total release size: 1.7 MB
Release files / aiohttp-1.1.0.tar.gz
| Download URL | aiohttp-1.1.0.tar.gz |
|---|---|
| Size | 508.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7a33afa92c5eab20252aba4aa184b6ec206bb718fcb51d1d0566d91f8b0dc9be
|
|
BLAKE2b-256 checksum How to use checksums |
3f7e7035a96a1d5a68636d47ea48d0abda0e25994ef092167fd5dd12fe380cde
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-1.1.0-cp35-cp35m-win_amd64.whl
| Download URL | aiohttp-1.1.0-cp35-cp35m-win_amd64.whl |
|---|---|
| Size | 136.4 kB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Windows x86-64 |
|
SHA-256 checksum How to use checksums |
1112a1b7b45f000a08f497fdff0ff97abcb02a2ef28dc19038af98261426a1d0
|
|
BLAKE2b-256 checksum How to use checksums |
663e549cdc5bdf6d444001b3f9e450226d3e878eb1b392182342f53718d07d99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-1.1.0-cp35-cp35m-win32.whl
| Download URL | aiohttp-1.1.0-cp35-cp35m-win32.whl |
|---|---|
| Size | 135.1 kB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Windows x86-32 |
|
SHA-256 checksum How to use checksums |
c5144a89ed314d5435434294ca5bd4cd2a24c791158fb36695cdfb8970489209
|
|
BLAKE2b-256 checksum How to use checksums |
a57b73e7b75090fa1aebaf2768330d14775013ddf40fab6b5c244444fae0a4fe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-1.1.0-cp35-cp35m-manylinux1_x86_64.whl
| Download URL | aiohttp-1.1.0-cp35-cp35m-manylinux1_x86_64.whl |
|---|---|
| Size | 153.2 kB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
c05b95448deabdba71c1c28f778479f4c63140345f5635946f35b3211087f2b3
|
|
BLAKE2b-256 checksum How to use checksums |
9f21f7e5005b10443cbb1de87b30235e19ce5e1c7ef5c90baa9d315e03e458c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-1.1.0-cp35-cp35m-manylinux1_i686.whl
| Download URL | aiohttp-1.1.0-cp35-cp35m-manylinux1_i686.whl |
|---|---|
| Size | 150.6 kB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
cf5f6bd15edbfc21daf03e7d8eaa6fb452c05500b534b0999fade28a65b15973
|
|
BLAKE2b-256 checksum How to use checksums |
da0dcc605614f69c7369ed27006c3f5944a53c07a57aecae0e7ad826373cb3d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-1.1.0-cp34-cp34m-win_amd64.whl
| Download URL | aiohttp-1.1.0-cp34-cp34m-win_amd64.whl |
|---|---|
| Size | 134.3 kB |
| Tags | CPython 3.4 CPython 3.4 pymalloc Windows x86-64 |
|
SHA-256 checksum How to use checksums |
20ca5752c5cd141f56ede1bc2817a7c2046af2f3b05d84f5510e4ffcb3e1b66b
|
|
BLAKE2b-256 checksum How to use checksums |
33f3828906ed9005dd965a988f6d94ad2dc13c92977f96c681416eba272e501a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-1.1.0-cp34-cp34m-win32.whl
| Download URL | aiohttp-1.1.0-cp34-cp34m-win32.whl |
|---|---|
| Size | 133.9 kB |
| Tags | CPython 3.4 CPython 3.4 pymalloc Windows x86-32 |
|
SHA-256 checksum How to use checksums |
ab005bbbfa8f0a980ecebcd8a632fdc6407298f1562f74cf01e566c0fabaf3aa
|
|
BLAKE2b-256 checksum How to use checksums |
802b23d819a0fdcad6cd306af3e2d9eeb091f244d48ed0bef362440c06c85b2a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-1.1.0-cp34-cp34m-manylinux1_x86_64.whl
| Download URL | aiohttp-1.1.0-cp34-cp34m-manylinux1_x86_64.whl |
|---|---|
| Size | 153.4 kB |
| Tags | CPython 3.4 CPython 3.4 pymalloc Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
1276040895ab085827daa2c5a667caffce3531299a7679fda92ed50039b7d188
|
|
BLAKE2b-256 checksum How to use checksums |
418deefa631c900b5d2b0ace40ec101ee4c8f2079d954a1263984cd33ba14224
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-1.1.0-cp34-cp34m-manylinux1_i686.whl
| Download URL | aiohttp-1.1.0-cp34-cp34m-manylinux1_i686.whl |
|---|---|
| Size | 150.7 kB |
| Tags | CPython 3.4 CPython 3.4 pymalloc Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
06d751fbe6e50990df022babc5b289508da02af40045cd2cef0a44666bb7112a
|
|
BLAKE2b-256 checksum How to use checksums |
55c964145ad328a11747a59da4b7cc0e48f513921159b0223ad22023c559b99d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |