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 get_body(client, url):
async with client.get(url) as response:
return await response.read()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
client = aiohttp.ClientSession(loop=loop)
raw_html = loop.run_until_complete(get_body(client, 'http://python.org'))
print(raw_html)
client.close()
If you want to use timeouts for aiohttp client please use standard asyncio approach:
yield from asyncio.wait_for(client.get(url), 10)
Server
This is simple usage example:
import asyncio
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
async def init(loop):
app = web.Application(loop=loop)
app.router.add_route('GET', '/echo', wshandler)
app.router.add_route('GET', '/{name}', handle)
srv = await loop.create_server(app.make_handler(),
'127.0.0.1', 8080)
print("Server started at http://127.0.0.1:8080")
return srv
loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()
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.20.0 (12-28-2015)
Extend list of web exceptions, add HTTPMisdirectedRequest, HTTPUpgradeRequired, HTTPPreconditionRequired, HTTPTooManyRequests, HTTPRequestHeaderFieldsTooLarge, HTTPVariantAlsoNegotiates, HTTPNotExtended, HTTPNetworkAuthenticationRequired status codes #644
Do not remove AUTHORIZATION header by WSGI handler #649
Fix broken support for https proxies with authentication #617
Get REMOTE_* and SEVER_* http vars from headers when listening on unix socket #654
Add HTTP 308 support #663
Add Tf format (time to serve request in seconds, %06f format) to access log #669
Remove one and a half years long deprecated ClientResponse.read_and_close() method
Optimize chunked encoding: use a single syscall instead of 3 calls on sending chunked encoded data
Use TCP_CORK and TCP_NODELAY to optimize network latency and throughput #680
Weboscket XOR performance improved #687
Avoid sending cookie attributes in Cookie header #613
Round server timeouts to second for grouping pending call. That leads to less amount of poller syscalls e.g epoll.poll(). #702
Close connection on websocket hadshake error #703
Implement class based views #684
Add headers parameter to ws_connect() #709
Drop unused function parse_remote_addr() #708
Close session on exception #707
Store http code and headers in WSServerHandshakeError #706
Make some low-level message properies readonly #710
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
File details
Details for the file aiohttp-0.20.0.tar.gz
.
File metadata
- Download URL: aiohttp-0.20.0.tar.gz
- Upload date:
- Size: 514.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 18193eb635541b52afb81cc500aa6b7d55dbb9bdad9f0c2e7c409bf51f6272f5 |
|
MD5 | 5db14a019b10d80e9b7f438d99aec83b |
|
BLAKE2b-256 | ec80be3b77426b09361fbf9e82b5539eee031406123cc25e45bba30a64e40a0d |