Skip to main content

Async http client/server framework (asyncio)

Project description

Async http client/server framework

aiohttp logo

Travis status for master branch 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 without the Callback Hell.

  • Web-server has middlewares and pluggable routing.

Getting started


To retrieve something from the web:

import aiohttp
import asyncio

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    async with aiohttp.ClientSession() as session:
        html = await fetch(session, '')

if __name__ == '__main__':
    loop = asyncio.get_event_loop()


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 wshandle(request):
    ws = web.WebSocketResponse()
    await ws.prepare(request)

    async for msg in ws:
        if msg.type == web.WSMsgType.text:
            await ws.send_str("Hello, {}".format(
        elif msg.type == web.WSMsgType.binary:
            await ws.send_bytes(
        elif msg.type == web.WSMsgType.close:

    return ws

app = web.Application()
app.add_routes([web.get('/', handle),
                web.get('/echo', wshandle),
                web.get('/{name}', handle)])




Communication channels

aio-libs google group:!forum/aio-libs

Feel free to post your questions and ideas here.

gitter chat

We support Stack Overflow. Please add aiohttp tag to your question there.


Optionally you may install the cChardet and aiodns libraries (highly recommended for sake of speed).


aiohttp is offered under the Apache 2 license.


The aiohttp community would like to thank Keepsafe ( for it’s support in the early days of the project.

Source code

The latest developer version is available in a github repository:


If you are interested in by efficiency, AsyncIO community maintains a list of benchmarks on the official wiki:


3.2.1 (2018-05-10)

  • Don’t reuse a connection with the same URL but different proxy/TLS settings (#2981)

3.2.0 (2018-05-06)


  • Raise TooManyRedirects exception when client gets redirected too many times instead of returning last response. (#2631)

  • Extract route definitions into separate file (#2876)

  • Raise an exception on request body reading after sending response. (#2895)

  • ClientResponse and RequestInfo now have real_url property, which is request url without fragment part being stripped (#2925)

  • Speed up connector limiting (#2937)

  • Added and links property for ClientResponse object (#2948)

  • Add request.config_dict for exposing nested applications data. (#2949)

  • Speed up HTTP headers serialization, server micro-benchmark runs 5% faster now. (#2957)

  • Apply assertions in debug mode only (#2966)


  • expose property app for TestClient (#2891)

  • Call on_chunk_sent when write_eof takes as a param the last chunk (#2909)

  • A closing bracket was added to __repr__ of resources (#2935)

  • Fix compression of FileResponse (#2942)

  • Fixes some bugs in the limit connection feature (#2964)

Improved Documentation

  • Drop async_timeout usage from documentation for client API in favor of timeout parameter. (#2865)

  • Improve Gunicorn logging documentation (#2921)

  • Replace multipart writer .serialize() method with .write() in documentation. (#2965)

Deprecations and Removals

  • Deprecate Application.make_handler() (#2938)


  • #2958

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.2.1.tar.gz (720.2 kB view hashes)

Uploaded source

Built Distributions

aiohttp-3.2.1-cp36-cp36m-win_amd64.whl (419.8 kB view hashes)

Uploaded cp36

aiohttp-3.2.1-cp36-cp36m-win32.whl (405.9 kB view hashes)

Uploaded cp36

aiohttp-3.2.1-cp36-cp36m-manylinux1_i686.whl (735.8 kB view hashes)

Uploaded cp36

aiohttp-3.2.1-cp35-cp35m-win_amd64.whl (418.0 kB view hashes)

Uploaded cp35

aiohttp-3.2.1-cp35-cp35m-win32.whl (404.3 kB view hashes)

Uploaded cp35

aiohttp-3.2.1-cp35-cp35m-manylinux1_i686.whl (720.3 kB view hashes)

Uploaded cp35

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