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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
aiohttp-3.2.1-cp35-cp35m-macosx_10_10_x86_64.whl (429.5 kB) Copy SHA256 hash SHA256 Wheel cp35
aiohttp-3.2.1-cp35-cp35m-macosx_10_11_x86_64.whl (427.7 kB) Copy SHA256 hash SHA256 Wheel cp35
aiohttp-3.2.1-cp35-cp35m-macosx_10_12_x86_64.whl (420.9 kB) Copy SHA256 hash SHA256 Wheel cp35
aiohttp-3.2.1-cp35-cp35m-manylinux1_i686.whl (720.3 kB) Copy SHA256 hash SHA256 Wheel cp35
aiohttp-3.2.1-cp35-cp35m-manylinux1_x86_64.whl (745.9 kB) Copy SHA256 hash SHA256 Wheel cp35
aiohttp-3.2.1-cp35-cp35m-win32.whl (404.3 kB) Copy SHA256 hash SHA256 Wheel cp35
aiohttp-3.2.1-cp35-cp35m-win_amd64.whl (418.0 kB) Copy SHA256 hash SHA256 Wheel cp35
aiohttp-3.2.1-cp36-cp36m-macosx_10_10_x86_64.whl (432.1 kB) Copy SHA256 hash SHA256 Wheel cp36
aiohttp-3.2.1-cp36-cp36m-macosx_10_11_x86_64.whl (430.2 kB) Copy SHA256 hash SHA256 Wheel cp36
aiohttp-3.2.1-cp36-cp36m-macosx_10_12_x86_64.whl (421.6 kB) Copy SHA256 hash SHA256 Wheel cp36
aiohttp-3.2.1-cp36-cp36m-manylinux1_i686.whl (735.8 kB) Copy SHA256 hash SHA256 Wheel cp36
aiohttp-3.2.1-cp36-cp36m-manylinux1_x86_64.whl (761.3 kB) Copy SHA256 hash SHA256 Wheel cp36
aiohttp-3.2.1-cp36-cp36m-win32.whl (405.9 kB) Copy SHA256 hash SHA256 Wheel cp36
aiohttp-3.2.1-cp36-cp36m-win_amd64.whl (419.8 kB) Copy SHA256 hash SHA256 Wheel cp36
aiohttp-3.2.1.tar.gz (720.2 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page