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.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()
Metadata
Release files for aiohttp 0.16.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| aiohttp-0.16.3.tar.gz | 1.4 MB | Without provenance | Details |
Release files / aiohttp-0.16.3.tar.gz
| Download URL | aiohttp-0.16.3.tar.gz |
|---|---|
| Size | 1.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
eaf479acc98ffee0a029882465ebf21f3c302e1b94a41b16c8a5a695bc614900
|
|
BLAKE2b-256 checksum How to use checksums |
69f0dc5959f1b2f641c40357e66a516214ef7d2d13a5ce3cdb044d78f7c57f39
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for aiohttp 0.16.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.