Skip to main content

Async http client/server framework (asyncio)

Project description

Async http client/server framework

aiohttp logo Travis status for master branch codecov.io status for master branch Latest PyPI package version Latest Read The Docs Chat on Gitter

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

https://aiohttp.readthedocs.io/

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

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

aiohttp-3.0.9.tar.gz (738.9 kB view details)

Uploaded Source

Built Distributions

aiohttp-3.0.9-cp36-cp36m-win_amd64.whl (361.2 kB view details)

Uploaded CPython 3.6m Windows x86-64

aiohttp-3.0.9-cp36-cp36m-win32.whl (349.9 kB view details)

Uploaded CPython 3.6m Windows x86

aiohttp-3.0.9-cp36-cp36m-manylinux1_x86_64.whl (657.3 kB view details)

Uploaded CPython 3.6m

aiohttp-3.0.9-cp36-cp36m-manylinux1_i686.whl (628.9 kB view details)

Uploaded CPython 3.6m

aiohttp-3.0.9-cp36-cp36m-macosx_10_12_x86_64.whl (365.3 kB view details)

Uploaded CPython 3.6m macOS 10.12+ x86-64

aiohttp-3.0.9-cp36-cp36m-macosx_10_11_x86_64.whl (373.4 kB view details)

Uploaded CPython 3.6m macOS 10.11+ x86-64

aiohttp-3.0.9-cp36-cp36m-macosx_10_10_x86_64.whl (374.5 kB view details)

Uploaded CPython 3.6m macOS 10.10+ x86-64

aiohttp-3.0.9-cp35-cp35m-win_amd64.whl (359.3 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-3.0.9-cp35-cp35m-win32.whl (348.3 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-3.0.9-cp35-cp35m-manylinux1_x86_64.whl (641.8 kB view details)

Uploaded CPython 3.5m

aiohttp-3.0.9-cp35-cp35m-manylinux1_i686.whl (612.7 kB view details)

Uploaded CPython 3.5m

aiohttp-3.0.9-cp35-cp35m-macosx_10_12_x86_64.whl (364.0 kB view details)

Uploaded CPython 3.5m macOS 10.12+ x86-64

aiohttp-3.0.9-cp35-cp35m-macosx_10_11_x86_64.whl (371.0 kB view details)

Uploaded CPython 3.5m macOS 10.11+ x86-64

aiohttp-3.0.9-cp35-cp35m-macosx_10_10_x86_64.whl (372.0 kB view details)

Uploaded CPython 3.5m macOS 10.10+ x86-64

File details

Details for the file aiohttp-3.0.9.tar.gz.

File metadata

  • Download URL: aiohttp-3.0.9.tar.gz
  • Upload date:
  • Size: 738.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for aiohttp-3.0.9.tar.gz
Algorithm Hash digest
SHA256 281a9fa56b5ce587a2147ec285d18a224942f7e020581afa6cc44d7caecf937b
MD5 8d2bd26125a58a82f1b4ce4afd705f2a
BLAKE2b-256 aa071e6a237d0847ae355eb5a5511aad5adcf8dac8e5fb42656bb14d063580d6

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp36-cp36m-win_amd64.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 1e2fd151d53e203d5269bfd5adae477de3737d970abeae848b3fc9a5da1a8ff0
MD5 51df29abeb60b075abbd4cb217e81569
BLAKE2b-256 735b94fb4bae44ae31c717c93bfdbbbe3244469069760921b02c34d8389ae53d

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp36-cp36m-win32.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 c81dfb439db6273041923d447e809a1260aa5e03ec0f47fdbae6a873fda6af3b
MD5 565fe45fb2af2b6a298ddc299a9dac4e
BLAKE2b-256 389258119bad5b4f903962bee577e490f92ea7540b8399278fd0152ecb148556

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a390b660e1a8b11dcf806468b1d4867808123c57d2c367985b9a1625b7ce2834
MD5 e319779ecdc856e2283b931f6873b0d0
BLAKE2b-256 48f02270fa8267174a3f38d306425ae20f94b99f70ed3ea39791248b7c53f238

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp36-cp36m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 0c4bd9553116254c53077ff79fb80bf4abbadcbec049c7a3d3c145402dca55b4
MD5 f74c17bd9bf80132c162e8b0c684e60b
BLAKE2b-256 b16fca2accc5bb744691279a664076102c005af94d6b9f1b58aeb45ac546c567

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp36-cp36m-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp36-cp36m-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8b780fc6230c5c412fcb77a1574af370e55f85765fa8fc7fa5450cba4353b29d
MD5 be991d5c83ade69ff842e61e76e0bb77
BLAKE2b-256 e7c444a482934176f65273e85a59ca0139c6e869e4a08a4a20184fd56060fd47

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp36-cp36m-macosx_10_11_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp36-cp36m-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 26405ca327865dbc6e5b9be19c5286732c0cecb48bf48219b9805c297fe37358
MD5 5f4ef655c891eb87851aa76dab50026e
BLAKE2b-256 4e059c84f5e5d6ad67769e35561239d2e4d87782d70bd75d79b48aabed2e905e

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp36-cp36m-macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp36-cp36m-macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 998fd59943b9f8a84e3097fef71fd1059c3a7c0584c4fd0f3f8f44dabdea2ed4
MD5 dc5d7524001e55a34448feb1f5dd1153
BLAKE2b-256 a7cee19b3435f898c5702c5570ede22dbb5630b743c6c7b80f22636e70eb2bbc

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp35-cp35m-win_amd64.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 eb83473ac6f30413bd2ec5990f91b163fe08a8a65e767ed752da894676dd8fb7
MD5 9b3fd5d15247b0a0ec6c4872eaeca702
BLAKE2b-256 dc3150536ee2cf0acacac76ca2aae4946faad85d1fcecda9a2a7d2b9e8b9e9af

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp35-cp35m-win32.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 1f6529ebaa5929d5bfe0855861d7eb1e29c7f826cb3a433d6e83d4cea9658f0d
MD5 cb7e73250f351b3452673e070b48921c
BLAKE2b-256 d86b9e8abfe859eba1cbfa10818675a3fcd5444299832d6a274509bca1e00649

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 b7c8ef9fca5d3d017908c699da4f658a163706528bc4e7b03accb15f9021ff59
MD5 0dff97a59da3c30ba0ca48ee7946f655
BLAKE2b-256 f56e384e5ed5711d5b5b67a1a9c6568aa19168cd9d414b071eb18eceb5f849cc

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp35-cp35m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 0f117efd1f4cb7c65a879e1763e444e67a6b46a9a6c643a9a39448c5848d8b45
MD5 8a75f73af98f0f1c807c10985ef21822
BLAKE2b-256 0fbce47110e9938c748f6a837823b74ab729c53ca2d54b93fa0f31295fff6f13

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp35-cp35m-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp35-cp35m-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 71edcf411a0498bfd9ff6d556c00de74b7e6d6d73bafc021fb3f6c086ee7c6c7
MD5 d8a360176afa9af6053f16d3045a926a
BLAKE2b-256 1bb5457e67a41854783ad2d5f2592ad033c5e4d60d5b0c402917e99821900546

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp35-cp35m-macosx_10_11_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp35-cp35m-macosx_10_11_x86_64.whl
Algorithm Hash digest
SHA256 5dcbbc6984f50e0df08e7ac179dc4d7dd8e5d7dc7900023da020fbfc60269844
MD5 f7e8694291b077b0dca83036cf694388
BLAKE2b-256 9ad12fcf8b7f99d0d978d4d126b72f9d22b4bca0316da41a8004350d328f08a2

See more details on using hashes here.

File details

Details for the file aiohttp-3.0.9-cp35-cp35m-macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-3.0.9-cp35-cp35m-macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 35ecd993db827d59a67e6910ad29ee45e917b6d91e829936525e84e55a6ca9bf
MD5 6c0c858c9257a456c3acca79b19ca073
BLAKE2b-256 5b43ee163b01121d6f57e61596a6c6b815a97b8cd45f923a6c0888b542693cef

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page