Async http client/server framework (asyncio)
Project description
Async http client/server framework
Key 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.
Getting started
Client
To retrieve something from the web:
import aiohttp
import asyncio
import async_timeout
async def fetch(session, url):
async with async_timeout.timeout(10):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'http://python.org')
print(html)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Server
This is simple usage example:
from aiohttp import web
async def handle(request):
name = request.match_info.get('name', "Anonymous")
text = "Hello, " + name
return web.Response(text=text)
async def wshandler(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
async for msg in ws:
if msg.type == web.MsgType.text:
await ws.send_str("Hello, {}".format(msg.data))
elif msg.type == web.MsgType.binary:
await ws.send_bytes(msg.data)
elif msg.type == web.MsgType.close:
break
return ws
app = web.Application()
app.router.add_get('/echo', wshandler)
app.router.add_get('/', handle)
app.router.add_get('/{name}', handle)
web.run_app(app)
Documentation
External links
Feel free to make a Pull Request for adding your link to these pages!
Communication channels
aio-libs google group: https://groups.google.com/forum/#!forum/aio-libs
Feel free to post your questions and ideas here.
gitter chat https://gitter.im/aio-libs/Lobby
We support Stack Overflow. Please add aiohttp tag to your question there.
Requirements
Python >= 3.5.3
Optionally you may install the cChardet and aiodns libraries (highly recommended for sake of speed).
License
aiohttp is offered under the Apache 2 license.
Keepsafe
The aiohttp community would like to thank Keepsafe (https://www.getkeepsafe.com) for it’s support in the early days of the project.
Source code
The latest developer version is available in a github repository: https://github.com/aio-libs/aiohttp
Benchmarks
If you are interested in by efficiency, AsyncIO community maintains a list of benchmarks on the official wiki: https://github.com/python/asyncio/wiki/Benchmarks
Changelog
3.0.9 (2018-03-14)
Close a connection if an unexpected exception occurs while sending a request (#2827)
3.0.8 (2018-03-12)
Use asyncio.current_task() on Python 3.7 (#2825)
3.0.7 (2018-03-08)
Fix SSL proxy support by client. (#2810)
Restore a imperative check in setup.py for python version. The check works in parallel to environment marker. As effect a error about unsupported Python versions is raised even on outdated systems with very old setuptools version installed. (#2813)
3.0.6 (2018-03-05)
Add _reuse_address and _reuse_port to web_runner.TCPSite.__slots__. (#2792)
3.0.5 (2018-02-27)
Fix InvalidStateError on processing a sequence of two RequestHandler.data_received calls on web server. (#2773)
3.0.4 (2018-02-26)
Fix IndexError in HTTP request handling by server. (#2752)
Fix MultipartWriter.append* no longer returning part/payload. (#2759)
3.0.3 (2018-02-25)
Relax attrs dependency to minimal actually supported version 17.0.3 The change allows to avoid version conflicts with currently existing test tools.
3.0.2 (2018-02-23)
Security Fix
Prevent Windows absolute URLs in static files. Paths like /static/D:\path and /static/\\hostname\drive\path are forbidden.
3.0.1
Technical release for fixing distribution problems.
3.0.0 (2018-02-12)
Features
Speed up the PayloadWriter.write method for large request bodies. (#2126)
StreamResponse and Response are now MutableMappings. (#2246)
ClientSession publishes a set of signals to track the HTTP request execution. (#2313)
Content-Disposition fast access in ClientResponse (#2455)
Added support to Flask-style decorators with class-based Views. (#2472)
Signal handlers (registered callbacks) should be coroutines. (#2480)
Support async with test_client.ws_connect(...) (#2525)
Introduce site and application runner as underlying API for web.run_app implementation. (#2530)
Only quote multipart boundary when necessary and sanitize input (#2544)
Make the aiohttp.ClientResponse.get_encoding method public with the processing of invalid charset while detecting content encoding. (#2549)
Add optional configurable per message compression for ClientWebSocketResponse and WebSocketResponse. (#2551)
Add hysteresis to StreamReader to prevent flipping between paused and resumed states too often. (#2555)
Support .netrc by trust_env (#2581)
Avoid to create a new resource when adding a route with the same name and path of the last added resource (#2586)
MultipartWriter.boundary is str now. (#2589)
Allow a custom port to be used by TestServer (and associated pytest fixtures) (#2613)
Add param access_log_class to web.run_app function (#2615)
Add ssl parameter to client API (#2626)
Fixes performance issue introduced by #2577. When there are no middlewares installed by the user, no additional and useless code is executed. (#2629)
Rename PayloadWriter to StreamWriter (#2654)
New options reuse_port, reuse_address are added to run_app and TCPSite. (#2679)
Use custom classes to pass client signals parameters (#2686)
Use attrs library for data classes, replace namedtuple. (#2690)
Pytest fixtures renaming, add aiohttp_ prefix (#2578)
Add aiohttp- prefix for pytest-aiohttp command line parameters (#2578)
Bugfixes
Correctly process upgrade request from server to HTTP2. aiohttp does not support HTTP2 yet, the protocol is not upgraded but response is handled correctly. (#2277)
Fix ClientConnectorSSLError and ClientProxyConnectionError for proxy connector (#2408)
Fix connector convert OSError to ClientConnectorError (#2423)
Fix connection attempts for multiple dns hosts (#2424)
Fix writing to closed transport by raising asyncio.CancelledError (#2499)
Fix warning in ClientSession.__del__ by stopping to try to close it. (#2523)
Fixed race-condition for iterating addresses from the DNSCache. (#2620)
Fix default value of access_log_format argument in web.run_app (#2649)
Freeze sub-application on adding to parent app (#2656)
Do percent encoding for .url_for() parameters (#2668)
Correctly process request start time and multiple request/response headers in access log extra (#2641)
Improved Documentation
Improve tutorial docs, using literalinclude to link to the actual files. (#2396)
Small improvement docs: better example for file uploads. (#2401)
Rename from_env to trust_env in client reference. (#2451)
Fixed mistype in Proxy Support section where trust_env parameter was used in session.get(“http://python.org”, trust_env=True) method instead of aiohttp.ClientSession constructor as follows: aiohttp.ClientSession(trust_env=True). (#2688)
Fix issue with unittest example not compiling in testing docs. (#2717)
Deprecations and Removals
Simplify HTTP pipelining implementation (#2109)
Drop StreamReaderPayload and DataQueuePayload. (#2257)
Drop md5 and sha1 finger-prints (#2267)
Drop WSMessage.tp (#2321)
Drop Python 3.4 and Python 3.5.0, 3.5.1, 3.5.2. Minimal supported Python versions are 3.5.3 and 3.6.0. yield from is gone, use async/await syntax. (#2343)
Drop aiohttp.Timeout and use async_timeout.timeout instead. (#2348)
Drop resolve param from TCPConnector. (#2377)
Add DeprecationWarning for returning HTTPException (#2415)
send_str(), send_bytes(), send_json(), ping() and pong() are genuine async functions now. (#2475)
Drop undocumented app.on_pre_signal and app.on_post_signal. Signal handlers should be coroutines, support for regular functions is dropped. (#2480)
StreamResponse.drain() is not a part of public API anymore, just use await StreamResponse.write(). StreamResponse.write is converted to async function. (#2483)
Drop deprecated slow_request_timeout param and **kwargs` from RequestHandler. (#2500)
Drop deprecated resource.url(). (#2501)
Remove %u and %l format specifiers from access log format. (#2506)
Drop deprecated request.GET property. (#2547)
Simplify stream classes: drop ChunksQueue and FlowControlChunksQueue, merge FlowControlStreamReader functionality into StreamReader, drop FlowControlStreamReader name. (#2555)
Do not create a new resource on router.add_get(…, allow_head=True) (#2585)
Drop access to TCP tuning options from PayloadWriter and Response classes (#2604)
Drop deprecated encoding parameter from client API (#2606)
Deprecate verify_ssl, ssl_context and fingerprint parameters in client API (#2626)
Get rid of the legacy class StreamWriter. (#2651)
Forbid non-strings in resource.url_for() parameters. (#2668)
Deprecate inheritance from ClientSession and web.Application and custom user attributes for ClientSession, web.Request and web.Application (#2691)
Drop resp = await aiohttp.request(…) syntax for sake of async with aiohttp.request(…) as resp:. (#2540)
Forbid synchronous context managers for ClientSession and test server/client. (#2362)
Misc
#2552
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
Built Distributions
Hashes for aiohttp-3.0.9-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e2fd151d53e203d5269bfd5adae477de3737d970abeae848b3fc9a5da1a8ff0 |
|
MD5 | 51df29abeb60b075abbd4cb217e81569 |
|
BLAKE2b-256 | 735b94fb4bae44ae31c717c93bfdbbbe3244469069760921b02c34d8389ae53d |
Hashes for aiohttp-3.0.9-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c81dfb439db6273041923d447e809a1260aa5e03ec0f47fdbae6a873fda6af3b |
|
MD5 | 565fe45fb2af2b6a298ddc299a9dac4e |
|
BLAKE2b-256 | 389258119bad5b4f903962bee577e490f92ea7540b8399278fd0152ecb148556 |
Hashes for aiohttp-3.0.9-cp36-cp36m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a390b660e1a8b11dcf806468b1d4867808123c57d2c367985b9a1625b7ce2834 |
|
MD5 | e319779ecdc856e2283b931f6873b0d0 |
|
BLAKE2b-256 | 48f02270fa8267174a3f38d306425ae20f94b99f70ed3ea39791248b7c53f238 |
Hashes for aiohttp-3.0.9-cp36-cp36m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0c4bd9553116254c53077ff79fb80bf4abbadcbec049c7a3d3c145402dca55b4 |
|
MD5 | f74c17bd9bf80132c162e8b0c684e60b |
|
BLAKE2b-256 | b16fca2accc5bb744691279a664076102c005af94d6b9f1b58aeb45ac546c567 |
Hashes for aiohttp-3.0.9-cp36-cp36m-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8b780fc6230c5c412fcb77a1574af370e55f85765fa8fc7fa5450cba4353b29d |
|
MD5 | be991d5c83ade69ff842e61e76e0bb77 |
|
BLAKE2b-256 | e7c444a482934176f65273e85a59ca0139c6e869e4a08a4a20184fd56060fd47 |
Hashes for aiohttp-3.0.9-cp36-cp36m-macosx_10_11_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26405ca327865dbc6e5b9be19c5286732c0cecb48bf48219b9805c297fe37358 |
|
MD5 | 5f4ef655c891eb87851aa76dab50026e |
|
BLAKE2b-256 | 4e059c84f5e5d6ad67769e35561239d2e4d87782d70bd75d79b48aabed2e905e |
Hashes for aiohttp-3.0.9-cp36-cp36m-macosx_10_10_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 998fd59943b9f8a84e3097fef71fd1059c3a7c0584c4fd0f3f8f44dabdea2ed4 |
|
MD5 | dc5d7524001e55a34448feb1f5dd1153 |
|
BLAKE2b-256 | a7cee19b3435f898c5702c5570ede22dbb5630b743c6c7b80f22636e70eb2bbc |
Hashes for aiohttp-3.0.9-cp35-cp35m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb83473ac6f30413bd2ec5990f91b163fe08a8a65e767ed752da894676dd8fb7 |
|
MD5 | 9b3fd5d15247b0a0ec6c4872eaeca702 |
|
BLAKE2b-256 | dc3150536ee2cf0acacac76ca2aae4946faad85d1fcecda9a2a7d2b9e8b9e9af |
Hashes for aiohttp-3.0.9-cp35-cp35m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1f6529ebaa5929d5bfe0855861d7eb1e29c7f826cb3a433d6e83d4cea9658f0d |
|
MD5 | cb7e73250f351b3452673e070b48921c |
|
BLAKE2b-256 | d86b9e8abfe859eba1cbfa10818675a3fcd5444299832d6a274509bca1e00649 |
Hashes for aiohttp-3.0.9-cp35-cp35m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b7c8ef9fca5d3d017908c699da4f658a163706528bc4e7b03accb15f9021ff59 |
|
MD5 | 0dff97a59da3c30ba0ca48ee7946f655 |
|
BLAKE2b-256 | f56e384e5ed5711d5b5b67a1a9c6568aa19168cd9d414b071eb18eceb5f849cc |
Hashes for aiohttp-3.0.9-cp35-cp35m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0f117efd1f4cb7c65a879e1763e444e67a6b46a9a6c643a9a39448c5848d8b45 |
|
MD5 | 8a75f73af98f0f1c807c10985ef21822 |
|
BLAKE2b-256 | 0fbce47110e9938c748f6a837823b74ab729c53ca2d54b93fa0f31295fff6f13 |
Hashes for aiohttp-3.0.9-cp35-cp35m-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 71edcf411a0498bfd9ff6d556c00de74b7e6d6d73bafc021fb3f6c086ee7c6c7 |
|
MD5 | d8a360176afa9af6053f16d3045a926a |
|
BLAKE2b-256 | 1bb5457e67a41854783ad2d5f2592ad033c5e4d60d5b0c402917e99821900546 |
Hashes for aiohttp-3.0.9-cp35-cp35m-macosx_10_11_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5dcbbc6984f50e0df08e7ac179dc4d7dd8e5d7dc7900023da020fbfc60269844 |
|
MD5 | f7e8694291b077b0dca83036cf694388 |
|
BLAKE2b-256 | 9ad12fcf8b7f99d0d978d4d126b72f9d22b4bca0316da41a8004350d328f08a2 |
Hashes for aiohttp-3.0.9-cp35-cp35m-macosx_10_10_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 35ecd993db827d59a67e6910ad29ee45e917b6d91e829936525e84e55a6ca9bf |
|
MD5 | 6c0c858c9257a456c3acca79b19ca073 |
|
BLAKE2b-256 | 5b43ee163b01121d6f57e61596a6c6b815a97b8cd45f923a6c0888b542693cef |