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.3 (04-22-2015)
Fix graceful shutdown handling
Fix Expect header handling for not found and not allowed routes #340
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.
Source Distribution
File details
Details for the file aiohttp-0.15.3.tar.gz
.
File metadata
- Download URL: aiohttp-0.15.3.tar.gz
- Upload date:
- Size: 455.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 85197e338cd48726fb2e7bb391ef24a6c0fba9c8f73b954beb95a642a8fc2488 |
|
MD5 | 08c1159a3b4d869c70be3b8f7efda7d0 |
|
BLAKE2b-256 | 879aed2b008eef13e5432a5be611d554ea6bc630f651bf7bce1a41c966d2b9ba |