http client/server for asyncio
Project description
http client/server for asyncio
Requirements
Python >= 3.3
License
aiohttp is offered under the Apache 2 license.
Documentation
Getting started
Client
To retrieve something from the web:
import aiohttp def get_body(url): response = yield from aiohttp.request('GET', url) return (yield from response.read())
You can use the get command like this anywhere in your asyncio powered program:
response = yield from aiohttp.request('GET', 'http://python.org') body = yield from response.read() print(body)
If you want to use timeouts for aiohttp client side please use standard asyncio approach:
yield from asyncio.wait_for(request('GET', url), 10)
Server
In aiohttp 0.12 we’ve added highlevel API for web HTTP server.
There is simple usage example:
import asyncio from aiohttp import web @asyncio.coroutine def handle(request): name = request.match_info.get('name', "Anonymous") text = "Hello, " + name return web.Response(body=text.encode('utf-8')) @asyncio.coroutine def init(loop): app = web.Application(loop=loop) app.router.add_route('GET', '/{name}', handle) srv = yield from 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()
CHANGES
0.14.0 (15/01/2014)
HttpMessage._add_default_headers does not overwrite existing headers #216
Expose multidict classes at package level
add aiohttp.web.WebSocketResponse
According to RFC 6455 websocket subprotocol preference order is provided by client, not by server
websocket’s ping and pong accept optional message parameter
multidict views do not accept getall parameter anymore, it returns the full body anyway.
multidicts have optional Cython optimization, cythonized version of multidicts is about 5 times faster than pure Python.
multidict.getall() returns list, not tuple.
Backward imcompatible change: now there are two mutable multidicts (MultiDict, CIMultiDict) and two immutable multidict proxies (MultiDictProxy and CIMultiDictProxy). Previous edition of multidicts was not a part of public API BTW.
Router refactoring to push Not Allowed and Not Found in middleware processing
Convert ConnectionError to aiohttp.DisconnectedError and don’t eat ConnectionError exceptions from web handlers.
Remove hop headers from Response class, wsgi response still uses hop headers.
Allow to send raw chunked encoded response.
Allow to encode output bytes stream into chunked encoding.
Allow to compress output bytes stream with deflate encoding.
Server has 75 seconds keepalive timeout now, was non-keepalive by default.
Application doesn’t accept **kwargs anymore (#243).
Request is inherited from dict now for making per-request storage to middlewares (#242).
0.13.1 (12-31-2014)
Add aiohttp.web.StreamResponse.started property #213
Html escape traceback text in ServerHttpProtocol.handle_error
Mention handler and middlewares in aiohttp.web.RequestHandler.handle_request on error (#218)
0.13.0 (12-29-2014)
StreamResponse.charset converts value to lower-case on assigning.
Chain exceptions when raise ClientRequestError.
Support custom regexps in route variables #204
Fixed graceful shutdown, disable keep-alive on connection closing.
Decode http message with utf-8 encoding, some servers send headers in utf-8 encoding #207
Support aiohtt.web middlewares #209
Add ssl_context to TCPConnector #206
0.12.0 (12-12-2014)
Deep refactoring of aiohttp.web in backward-incompatible manner. Sorry, we have to do this.
Automatically force aiohttp.web handlers to coroutines in UrlDispatcher.add_route() #186
Rename Request.POST() function to Request.post()
Added POST attribute
Response processing refactoring: constructor does’t accept Request instance anymore.
Pass application instance to finish callback
Exceptions refactoring
Do not unquote query string in aiohttp.web.Request
Fix concurrent access to payload in RequestHandle.handle_request()
Add access logging to aiohttp.web
Gunicorn worker for aiohttp.web
Removed deprecated AsyncGunicornWorker
Removed deprecated HttpClient
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.