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.16.4 (06-13-2015)
Don’t clear current exception in multidict’s __repr__ (cythonized versions) #410
0.16.3 (05-30-2015)
Fix StaticRoute vulnerability to directory traversal attacks #380
0.16.2 (05-27-2015)
- Update python version required for __del__ usage: it’s actially
3.4.1 instead of 3.4.0
Add check for presence of loop.is_closed() method before call the former #378
0.16.1 (05-27-2015)
Fix regression in static file handling #377
0.16.0 (05-26-2015)
Unset waiter future after cancellation #363
Update request url with query parameters #372
Support new fingerprint param of TCPConnector to enable verifying ssl certificates via md5, sha1, or sha256 digest #366
Setup uploaded filename if field value is binary and transfer encoding is not specified #349
Implement ClientSession.close() method
Implement connector.closed readonly property
Implement ClientSession.closed readonly property
Implement ClientSession.connector readonly property
Implement ClientSession.detach method
Add __del__ to client-side objects: sessions, connectors, connections, requests, responses.
Refactor connections cleanup by connector #357
Add limit parameter to connector constructor #358
Add request.has_body property #364
Add response_class parameter to ws_connect() #367
ProxyConnector doesn’t support keep-alive requests by default starting from now #368
Add connector.force_close property
Add ws_connect to ClientSession #374
Support optional chunk_size parameter in router.add_static()
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.16.4.tar.gz
.
File metadata
- Download URL: aiohttp-0.16.4.tar.gz
- Upload date:
- Size: 1.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 270a5b458e6fb1884478f55c377e8fb656f5244637458ad395b84c2722a7533d |
|
MD5 | 8fc399e2407ebb0693297d48c78f5b9c |
|
BLAKE2b-256 | 4b71bc9a698e85c6d7d555189b8bb1014552d06050b0539406ff858f145cc273 |