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):
async with session.get(url) as response:
return await response.text()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
with aiohttp.ClientSession(loop=loop) as session:
html = loop.run_until_complete(
fetch(session, 'http://python.org'))
print(html)
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(body=text.encode('utf-8'))
async def wshandler(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
async for msg in ws:
if msg.tp == web.MsgType.text:
ws.send_str("Hello, {}".format(msg.data))
elif msg.tp == web.MsgType.binary:
ws.send_bytes(msg.data)
elif msg.tp == web.MsgType.close:
break
return ws
app = web.Application()
app.router.add_route('GET', '/echo', wshandler)
app.router.add_route('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()
shoud 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.1
Optionally you may install cChardet library: https://pypi.python.org/pypi/cchardet/1.0.0
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
0.21.2 (02-16-2016)
Fix a regression: support for handling ~/path in static file routes was broken #782
0.21.1 (02-10-2016)
Make new resources classes public #767
Add router.resources() view
Fix cmd-line parameter names in doc
0.21.0 (02-04-2016)
Introduce on_shutdown signal #722
Implement raw input headers #726
Implement web.run_app utility function #734
Introduce on_cleanup signal
Deprecate Application.finish() / Application.register_on_finish() in favor of on_cleanup.
Get rid of bare aiohttp.request(), aiohttp.get() and family in docs #729
Deprecate bare aiohttp.request(), aiohttp.get() and family #729
Refactor keep-alive support #737:
Enable keepalive for HTTP 1.0 by default
Disable it for HTTP 0.9 (who cares about 0.9, BTW?)
For keepalived connections
Send Connection: keep-alive for HTTP 1.0 only
don’t send Connection header for HTTP 1.1
For non-keepalived connections
Send Connection: close for HTTP 1.1 only
don’t send Connection header for HTTP 1.0
Add version parameter to ClientSession constructor, deprecate it for session.request() and family #736
Enable access log by default #735
Deprecate app.router.register_route() (the method was not documented intentionally BTW).
Deprecate app.router.named_routes() in favor of app.router.named_resources()
route.add_static accepts pathlib.Path now #743
Add command line support: $ python -m aiohttp.web package.main #740
FAQ section was added to docs. Enjoy and fill free to contribute new topics
Add async context manager support to ClientSession
Document ClientResponse’s host, method, url properties
Use CORK/NODELAY in client API #748
ClientSession.close and Connector.close are coroutines now
Close client connection on exception in ClientResponse.release()
Allow to read multipart parts without content-length specified #750
Add support for unix domain sockets to gunicorn worker #470
Add test for default Expect handler #601
Add the first demo project
Rename loader keyword argument in web.Request.json method. #646
Add local socket binding for TCPConnector #678
Metadata
Release files for aiohttp 0.21.2
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-0.21.2.tar.gz | 528.6 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| aiohttp-0.21.2-cp35-cp35m-win_amd64.whl | CPython 3.5 | CPython 3.5 pymalloc | Windows x86-64 | Details |
| aiohttp-0.21.2-cp35-cp35m-win32.whl | CPython 3.5 | CPython 3.5 pymalloc | Windows x86-32 | Details |
| aiohttp-0.21.2-cp34-cp34m-win_amd64.whl | CPython 3.4 | CPython 3.4 pymalloc | Windows x86-64 | Details |
| aiohttp-0.21.2-cp34-cp34m-win32.whl | CPython 3.4 | CPython 3.4 pymalloc | Windows x86-32 | Details |
Total release size: 1.5 MB
Release files / aiohttp-0.21.2.tar.gz
| Download URL | aiohttp-0.21.2.tar.gz |
|---|---|
| Size | 528.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
991e574309815036ca36889a8917005bb795522acd2ba9cc870e07c260c092b5
|
|
BLAKE2b-256 checksum How to use checksums |
a692fe3c2028709885105f41778d1828199d5d3db8cd7e6a17280f17964a0fc9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-0.21.2-cp35-cp35m-win_amd64.whl
| Download URL | aiohttp-0.21.2-cp35-cp35m-win_amd64.whl |
|---|---|
| Size | 243.6 kB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ec5b3aafef11d170926a852f8b874c69688e76161684069dc2fc777b2d86c259
|
|
BLAKE2b-256 checksum How to use checksums |
4dab0d019f5071e9c3f13d9f208eaa8308ba4e6e4990c7fd4666be066453d003
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-0.21.2-cp35-cp35m-win32.whl
| Download URL | aiohttp-0.21.2-cp35-cp35m-win32.whl |
|---|---|
| Size | 235.2 kB |
| Tags | CPython 3.5 CPython 3.5 pymalloc Windows x86-32 |
|
SHA-256 checksum How to use checksums |
c96c1e980589ccf0a8c139e737ceafca1117ef176df884bc10064d170fb0f7d9
|
|
BLAKE2b-256 checksum How to use checksums |
567949ffdcfd4334c538d2255841f4656d1c12e9108ad0a485e71923c4490933
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-0.21.2-cp34-cp34m-win_amd64.whl
| Download URL | aiohttp-0.21.2-cp34-cp34m-win_amd64.whl |
|---|---|
| Size | 241.0 kB |
| Tags | CPython 3.4 CPython 3.4 pymalloc Windows x86-64 |
|
SHA-256 checksum How to use checksums |
3226ae7de905a1a0e0c702d8f29f6d7cff3a6f00b1cf719baf2ac70310747640
|
|
BLAKE2b-256 checksum How to use checksums |
2143114ad2451446ac6e743927812295d6b874a432bea047ebe0ae1dc44d230f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / aiohttp-0.21.2-cp34-cp34m-win32.whl
| Download URL | aiohttp-0.21.2-cp34-cp34m-win32.whl |
|---|---|
| Size | 235.1 kB |
| Tags | CPython 3.4 CPython 3.4 pymalloc Windows x86-32 |
|
SHA-256 checksum How to use checksums |
975be3cd7708d4d69b18bf613d255d8d4ae21064798d9742d8472e0061731677
|
|
BLAKE2b-256 checksum How to use checksums |
136702af372d70d3b5fd3edfc4a814ea2b2cb4a281886472382e4823c0642bff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |