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.
Requirements
Python >= 3.3
License
aiohttp is offered under the Apache 2 license.
Documentation
Source code
The latest developer version is available in a github repository: https://github.com/KeepSafe/aiohttp
Getting started
Client
To retrieve something from the web:
import aiohttp
import asyncio
def get_body(url):
response = yield from aiohttp.request('GET', url)
return (yield from response.read())
if __name__ == '__main__':
loop = asyncio.get_event_loop()
raw_html = loop.run_until_complete(get_body('http://python.org'))
print(raw_html)
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.
This 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 wshandler(request):
ws = web.WebSocketResponse()
ws.start(request)
while True:
msg = yield from ws.receive()
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
@asyncio.coroutine
def init(loop):
app = web.Application(loop=loop)
app.router.add_route('GET', '/echo', wshandler)
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.15.2 (04-19-2015)
Flow control subsystem refactoring
Http server performace optimizations
Allow to match any request method with *
Explicitly call drain on transport #316
Make chardet module dependency mandatory #318
Support keep-alive for HTTP 1.0 #325
Do not chunk single file during upload #327
Add ClientSession object for cookie storage and default headers #328
Add keep_alive_on argument for http server handler.
0.15.1 (03-31-2015)
Pass Autobahn Testsuit tests
Fixed websocket fragmentation
Fixed websocket close procedure
Fixed parser buffer limits
Added timeout parameter to WebSocketResponse ctor
Added WebSocketResponse.close_code attribute
0.15.0 (03-27-2015)
Client WebSockets support
New Multipart system #273
Support for “Except” header #287 #267
Set default Content-Type for post requests #184
Fix issue with construction dynamic route with regexps and trailing slash #266
Add repr to web.Request
Add repr to web.Response
Add repr for NotFound and NotAllowed match infos
Add repr for web.Application
Add repr to UrlMappingMatchInfo #217
Gunicorn 19.2.x compatibility
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.