http client/server for asyncio

.. image:: :height: 64px :width: 64px :alt: aiohttp logo

.. image:: :target: :align: right


  • Supports both client and server side of HTTP protocol.
  • Supports Web-Sockets out-of-the-box.
  • Web-server has middlewares and pluggable routing.


  • Python >= 3.3
  • asyncio


aiohttp is offered under the Apache 2 license.


Source code

The latest developer version is available in a github repository:

Getting started

Client ^^^^^^

To retrieve something from the web:

.. code-block:: python

import aiohttp

def get_body(url): response = yield from aiohttp.request(‘GET’, url) return (yield from

You can use the get command like this anywhere in your asyncio powered program:

.. code-block:: python

response = yield from aiohttp.request(‘GET’, ‘’) body = yield from print(body)

If you want to use timeouts for aiohttp client side please use standard asyncio approach:

.. code-block:: python

yield from asyncio.wait_for(request(‘GET’, url), 10)

Server ^^^^^^

In aiohttp 0.12 we’ve added highlevel API for web HTTP server.

There is simple usage example:

.. code-block:: python

import asyncio
from aiohttp import web

def handle(request):
    name = request.match_info.get('name', "Anonymous")
    text = "Hello, " + name
    return web.Response(body=text.encode('utf-8'))

def init(loop):
    app = web.Application(loop=loop)
    app.router.add_route('GET', '/{name}', handle)

    srv = yield from loop.create_server(app.make_handler(), '', 8080)
    print("Server started at")
    return srv

loop = asyncio.get_event_loop()