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
- asyncio https://pypi.python.org/pypi/asyncio
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
aiohttp-0.16.4.tar.gz
(1.6 MB
view hashes)