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, 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
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.0.2 (2016-09-22)
Make CookieJar compatible with 32-bit systems #1188
Add missing WSMsgType to web_ws.__all__, see #1200
Fix CookieJar ctor when called with loop=None #1203
Fix broken upper-casing in wsgi support #1197
1.0.1 (2016-09-16)
Restore aiohttp.web.MsgType alias for aiohttp.WSMsgType for sake of backward compatibility #1178
Tune alabaster schema.
Use text/html content type for displaying index pages by static file handler.
Fix AssertionError in static file handling #1177
Fix access log formats %O and %b for static file handling
Remove debug setting of GunicornWorker, use app.debug to control its debug-mode instead
1.0.0 (2016-09-16)
Change default size for client session’s connection pool from unlimited to 20 #977
Add IE support for cookie deletion. #994
Remove deprecated WebSocketResponse.wait_closed method (BACKWARD INCOMPATIBLE)
Remove deprecated force parameter for ClientResponse.close method (BACKWARD INCOMPATIBLE)
Avoid using of mutable CIMultiDict kw param in make_mocked_request #997
Make WebSocketResponse.close a little bit faster by avoiding new task creating just for timeout measurement
Add proxy and proxy_auth params to client.get() and family, deprecate ProxyConnector #998
Add support for websocket send_json and receive_json, synchronize server and client API for websockets #984
Implement router shourtcuts for most useful HTTP methods, use app.router.add_get(), app.router.add_post() etc. instead of app.router.add_route() #986
Support SSL connections for gunicorn worker #1003
Move obsolete examples to legacy folder
Switch to multidict 2.0 and title-cased strings #1015
{FOO}e logger format is case-sensitive now
Fix logger report for unix socket 8e8469b
Rename aiohttp.websocket to aiohttp._ws_impl
Rename aiohttp.MsgType tp aiohttp.WSMsgType
Introduce aiohttp.WSMessage officially
Rename Message -> WSMessage
Remove deprecated decode param from resp.read(decode=True)
Use 5min default client timeout #1028
Relax HTTP method validation in UrlDispatcher #1037
Pin minimal supported asyncio version to 3.4.2+ (loop.is_close() should be present)
Remove aiohttp.websocket module (BACKWARD INCOMPATIBLE) Please use high-level client and server approaches
Link header for 451 status code is mandatory
Fix test_client fixture to allow multiple clients per test #1072
make_mocked_request now accepts dict as headers #1073
Add Python 3.5.2/3.6+ compatibility patch for async generator protocol change #1082
Improvement test_client can accept instance object #1083
Simplify ServerHttpProtocol implementation #1060
Add a flag for optional showing directory index for static file handling #921
Define web.Application.on_startup() signal handler #1103
Drop ChunkedParser and LinesParser #1111
Call Application.startup in GunicornWebWorker #1105
Fix client handling hostnames with 63 bytes when a port is given in the url #1044
Implement proxy support for ClientSession.ws_connect #1025
Return named tuple from WebSocketResponse.can_prepare #1016
Fix access_log_format in GunicornWebWorker #1117
Setup Content-Type to application/octet-stream by default #1124
Deprecate debug parameter from app.make_handler(), use Application(debug=True) instead #1121
Remove fragment string in request path #846
Use aiodns.DNSResolver.gethostbyname() if available #1136
Fix static file sending on uvloop when sendfile is available #1093
Make prettier urls if query is empty dict #1143
Fix redirects for HEAD requests #1147
Default value for StreamReader.read_nowait is -1 from now #1150
aiohttp.StreamReader is not inherited from asyncio.StreamReader from now (BACKWARD INCOMPATIBLE) #1150
Streams documentation added #1150
Add multipart coroutine method for web Request object #1067
Publish ClientSession.loop property #1149
Fix static file with spaces #1140
Fix piling up asyncio loop by cookie expiration callbacks #1061
Drop Timeout class for sake of async_timeout external library. aiohttp.Timeout is an alias for async_timeout.timeout
use_dns_cache parameter of aiohttp.TCPConnector is True by default (BACKWARD INCOMPATIBLE) #1152
aiohttp.TCPConnector uses asynchronous DNS resolver if available by default (BACKWARD INCOMPATIBLE) #1152
Conform to RFC3986 - do not include url fragments in client requests #1174
Drop ClientSession.cookies (BACKWARD INCOMPATIBLE) #1173
Refactor AbstractCookieJar public API (BACKWARD INCOMPATIBLE) #1173
Fix clashing cookies with have the same name but belong to different domains (BACKWARD INCOMPATIBLE) #1125
Support binary Content-Transfer-Encoding #1169
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
File details
Details for the file aiohttp-1.0.2.tar.gz
.
File metadata
- Download URL: aiohttp-1.0.2.tar.gz
- Upload date:
- Size: 499.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d104a8e762debc1acc3fe40dbc4f0da4cace5a797a93d59c618673b390d3947c |
|
MD5 | c30b737446848d0d0067063d25cf2814 |
|
BLAKE2b-256 | 7545f81bcce8441a09cb7de7cfe54358452cf9eab6068cde239ea98ccf52c608 |
File details
Details for the file aiohttp-1.0.2-cp35-cp35m-win_amd64.whl
.
File metadata
- Download URL: aiohttp-1.0.2-cp35-cp35m-win_amd64.whl
- Upload date:
- Size: 133.6 kB
- Tags: CPython 3.5m, Windows x86-64
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | acb473768ff4b1467c05b17d463ad1a8f6576e296e2f8da7be03ba67589688a9 |
|
MD5 | aa34118be7f6e1e614833c7bba470246 |
|
BLAKE2b-256 | f115ab8870e99c5bb18ceafc72060dcc08726caff3a63123eca0fc21316d6e09 |
File details
Details for the file aiohttp-1.0.2-cp35-cp35m-win32.whl
.
File metadata
- Download URL: aiohttp-1.0.2-cp35-cp35m-win32.whl
- Upload date:
- Size: 132.4 kB
- Tags: CPython 3.5m, Windows x86
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1fb04341c17eafa03654d38ab9a8ebd9425b0a924c0239c9e136be671f7fc700 |
|
MD5 | aabf392930e3695a7a74673cb6c3591f |
|
BLAKE2b-256 | e12b5354cf681eb649ea6e93fb1a8117e48dd7c38c311fe8da2ee19c3024e216 |
File details
Details for the file aiohttp-1.0.2-cp35-cp35m-manylinux1_x86_64.whl
.
File metadata
- Download URL: aiohttp-1.0.2-cp35-cp35m-manylinux1_x86_64.whl
- Upload date:
- Size: 150.5 kB
- Tags: CPython 3.5m
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d18e76023641bbd256813bcaddfd00a3b6b844dd9053c1053de4d611f75fedb5 |
|
MD5 | 22fed62ceacdd4eca6d3cd1e278ff90b |
|
BLAKE2b-256 | b4b77d75aa70d00c71722441ba8ebe6d53a94f34ea3ddc636ca2f3734afc66a5 |
File details
Details for the file aiohttp-1.0.2-cp35-cp35m-manylinux1_i686.whl
.
File metadata
- Download URL: aiohttp-1.0.2-cp35-cp35m-manylinux1_i686.whl
- Upload date:
- Size: 147.8 kB
- Tags: CPython 3.5m
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e0c5a8a7bffb6d3c22588326a4531877deedc4a7eae5748d4c49945dc2513335 |
|
MD5 | 9e0e5213af7b2019a0289f3424815eac |
|
BLAKE2b-256 | d8894c6d5899b43cc178060c9f1f6ab9974b87483f6be897d0518a9556008cac |
File details
Details for the file aiohttp-1.0.2-cp34-cp34m-win_amd64.whl
.
File metadata
- Download URL: aiohttp-1.0.2-cp34-cp34m-win_amd64.whl
- Upload date:
- Size: 131.5 kB
- Tags: CPython 3.4m, Windows x86-64
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 45103496b3ae95ba9136f0532ca0b3746c14cefda1ea1aeac7bd3be71efcd1f4 |
|
MD5 | 50197424fa280e71ddd8ea6dd928eca1 |
|
BLAKE2b-256 | 70c3c83cb0404c5dbf5087dd8d6c816032e6863e093d0e81fc42431764bf8dda |
File details
Details for the file aiohttp-1.0.2-cp34-cp34m-win32.whl
.
File metadata
- Download URL: aiohttp-1.0.2-cp34-cp34m-win32.whl
- Upload date:
- Size: 131.2 kB
- Tags: CPython 3.4m, Windows x86
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f12f0be14da5379f798c2fb41ebf993de42373f48cab769988bdfa56241a9b05 |
|
MD5 | 08fe25e6770015ed9b067857464b1855 |
|
BLAKE2b-256 | 963858fc90df5a9716d98788f0a4b438198cf2658c51d7a2415a5f79dc214308 |
File details
Details for the file aiohttp-1.0.2-cp34-cp34m-manylinux1_x86_64.whl
.
File metadata
- Download URL: aiohttp-1.0.2-cp34-cp34m-manylinux1_x86_64.whl
- Upload date:
- Size: 150.6 kB
- Tags: CPython 3.4m
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d758c88dca9dd128b00a1ffd17d260b193f1cb52bc829cbe152e1b2207d1c50 |
|
MD5 | 20c73c76d08c18c94cac807c7a98a4d8 |
|
BLAKE2b-256 | 3d4183e3610c67e28613ae461eb81de5f6bc36da9213bc9fd165844b040b6de2 |
File details
Details for the file aiohttp-1.0.2-cp34-cp34m-manylinux1_i686.whl
.
File metadata
- Download URL: aiohttp-1.0.2-cp34-cp34m-manylinux1_i686.whl
- Upload date:
- Size: 147.9 kB
- Tags: CPython 3.4m
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 928d886947235a810e625d49bfb90a3878d6e4cf9263444c98d7ddf619adf967 |
|
MD5 | 444c2f34cd507af2470e8df809b807c1 |
|
BLAKE2b-256 | 1684e2d095d31d6371034150b8cc66ad5025822ef1206a850e2055ce3e805590 |