http client/server for asyncio
Project description
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-hypernode.com/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.22.3 (07-26-2016)
Do not filter cookies if unsafe flag provided #1005
0.22.2 (07-23-2016)
Suppress CancelledError when Timeout raises TimeoutError #970
Don’t expose aiohttp.__version__
Add unsafe parameter to CookieJar #968
Use unsafe cookie jar in test client tools
Expose aiohttp.CookieJar name
0.22.1 (07-16-2016)
Large cookie expiration/max-age doesn’t break an event loop from now (fixes #967)
0.22.0 (07-15-2016)
Fix bug in serving static directory #803
Fix command line arg parsing #797
Fix a documentation chapter about cookie usage #790
Handle empty body with gzipped encoding #758
Support 451 Unavailable For Legal Reasons http status #697
Fix Cookie share example and few small typos in docs #817
UrlDispatcher.add_route with partial coroutine handler #814
Optional support for aiodns #728
Add ServiceRestart and TryAgainLater websocket close codes #828
Fix prompt message for web.run_app #832
Allow to pass None as a timeout value to disable timeout logic #834
Fix leak of connection slot during connection erro #835
Gunicorn worker with uvloop support aiohttp.worker.GunicornUVLoopWebWorker #878
Don’t send body in response to HEAD request #838
Skip the preamble in MultipartReader #881
Implement BasicAuth decode classmethod. #744
Don’t crash logger when transport is None #889
Use a create_future compatibility wrapper instead of creating Futures directly #896
Add test utilities to aiohttp #902
Improve Request.__repr__ #875
Skip DNS resolving if provided host is already an ip address #874
Add headers to ClientSession.ws_connect #785
Document that server can send pre-compressed data #906
Don’t add Content-Encoding and Transfer-Encoding if no body #891
Add json() convenience methods to websocket message objects #897
Add client_resp.raise_for_status() #908
Implement cookie filter #799
Include an example of middleware to handle error pages #909
Fix error handling in StaticFileMixin #856
Add mocked request helper #900
Fix empty ALLOW Response header for cls based View #929
Respect CONNECT method to implement a proxy server #847
Add pytest_plugin #914
Add tutorial
Add backlog option to support more than 128 (default value in “create_server” function) concurrent connections #892
Allow configuration of header size limits #912
Separate sending file logic from StaticRoute dispatcher #901
Drop deprecated share_cookies connector option (BACKWARD INCOMPATIBLE)
Drop deprecated support for tuple as auth paramter. Use aiohttp.BasicAuth instead (BACKWARD INCOMPATIBLE)
Remove deprecated request.payload property, use content instead. (BACKWARD INCOMPATIBLE)
Drop all mentions about api changes in documentaion for versions older than 0.16
Allow to override default cookie jar #963
Add manylinux wheel builds
Dup a socket for sendfile usage #964
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for aiohttp-0.22.3-cp35-cp35m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 35e3c94985cfe4c93145cf2cfcf44a80401174f1f20a28b9fe6339573ab88c77 |
|
MD5 | 172175b36bdd09dead3ca3d6d5cd5629 |
|
BLAKE2b-256 | 7024d7888256ae59ee0ed187d6670b02085b6b7d6033708a93e6f7e309f708ca |
Hashes for aiohttp-0.22.3-cp35-cp35m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c069a50ee867684bf23d3e96248f881444fd40c511b0581cb42314090ae8f2c |
|
MD5 | 2fe9ffab06060c75faad17c49f4d13d0 |
|
BLAKE2b-256 | 8fc8fa6d827573bd9204b90f1e402ecc15f89bd7bbf247a5bf30fd476c2ba81f |
Hashes for aiohttp-0.22.3-cp35-cp35m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8da4f3938b87e8379dedba8560a66b9bff3ff1d6a451bbbbf023b91392f27450 |
|
MD5 | b85e5c06ab167ec0d585d436d44f4e62 |
|
BLAKE2b-256 | 8a4aabe36e3b386f15969ee2581ca99a9037ff2d766fdf0edb31c55726fb07b9 |
Hashes for aiohttp-0.22.3-cp35-cp35m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 23ba000908fa3390fff62ad749c3a09b32978ba8cd5832f98824f6bab773326d |
|
MD5 | f50387b72362cc798e4c8a8e20ffa78c |
|
BLAKE2b-256 | 1230ffc4b09faa003bb9c060c1352abd1c712ea5294a801678a958f14100041c |
Hashes for aiohttp-0.22.3-cp34-cp34m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 28bbce54ef409ec02c30a463c209ea904f323e58b09e6813f2e95599acbb8d5a |
|
MD5 | a489deb99d3197ee94844bd4468fe38b |
|
BLAKE2b-256 | bef825bfc8f97b28c653e007455a3596dc8f7432d6d77d0d2c84b26e3b119c9a |
Hashes for aiohttp-0.22.3-cp34-cp34m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b050caf10736e305eaf6c0acb252f53e6898765651532ed6a494ceee24eba4c |
|
MD5 | 6eddbd98ef7bc1ae390213e2dfa28c34 |
|
BLAKE2b-256 | 60308f688ba87a5190450e308cd9c150e1f94347a430a56b9eedd3dc47885936 |
Hashes for aiohttp-0.22.3-cp34-cp34m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e4250da89e5ecc73cc02f84b87458ce87b4fbce07203819585767ac662762710 |
|
MD5 | 1c508d229a075b38042e360721008280 |
|
BLAKE2b-256 | 2ce7f2468b23824eea20d9cc5d4de97162782382ddd8f74e4720c7173870b9b9 |
Hashes for aiohttp-0.22.3-cp34-cp34m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0aa8e51af7df93adb55e017c625d7f02c59a4f7e419f47fea679f736ecbdaadb |
|
MD5 | c787878aceeb8a176637168a69f78be9 |
|
BLAKE2b-256 | c5cd935a312909a7ab8cc16ebf2d543cdc4c8cd8f82a023de7a16956137d38a3 |