skip to navigation
skip to content

aiohttp 0.22.5

http client/server for asyncio

Package Documentation

http client/server for asyncio


  • 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


To retrieve something from the web:

import aiohttp
import asyncio

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

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    with aiohttp.ClientSession(loop=loop) as session:
        html = loop.run_until_complete(
            fetch(session, ''))


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(body=text.encode('utf-8'))

async def wshandler(request):
    ws = web.WebSocketResponse()
    await ws.prepare(request)

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

    return ws

app = web.Application()
app.router.add_route('GET', '/echo', wshandler)
app.router.add_route('GET', '/{name}', handle)


Note: examples are written for Python 3.5+ and utilize PEP-492 aka async/await. If you are using Python 3.4 please replace await with yield from and async def with @coroutine e.g.:

async def coro(...):
    ret = await f()

shoud be replaced by:

def coro(...):
    ret = yield from f()

Discussion list

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


Optionally you may install cChardet library:


aiohttp is offered under the Apache 2 license.

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:


0.22.5 (08-02-2016)

  • Pin miltidict version to >=1.2.2

0.22.3 (07-26-2016)

  • Do not filter cookies if unsafe flag provided #1005

0.22.2 (07-23-2016)

  • Suppress CancelledError when Timeout raises TimeoutError #970
  • Don’t expose aiohttp.__version__
  • Add unsafe parameter to CookieJar #968
  • Use unsafe cookie jar in test client tools
  • Expose aiohttp.CookieJar name

0.22.1 (07-16-2016)

  • Large cookie expiration/max-age doesn’t break an event loop from now (fixes #967)

0.22.0 (07-15-2016)

  • Fix bug in serving static directory #803
  • Fix command line arg parsing #797
  • Fix a documentation chapter about cookie usage #790
  • Handle empty body with gzipped encoding #758
  • Support 451 Unavailable For Legal Reasons http status #697
  • Fix Cookie share example and few small typos in docs #817
  • UrlDispatcher.add_route with partial coroutine handler #814
  • Optional support for aiodns #728
  • Add ServiceRestart and TryAgainLater websocket close codes #828
  • Fix prompt message for web.run_app #832
  • Allow to pass None as a timeout value to disable timeout logic #834
  • Fix leak of connection slot during connection erro #835
  • Gunicorn worker with uvloop support aiohttp.worker.GunicornUVLoopWebWorker #878
  • Don’t send body in response to HEAD request #838
  • Skip the preamble in MultipartReader #881
  • Implement BasicAuth decode classmethod. #744
  • Don’t crash logger when transport is None #889
  • Use a create_future compatibility wrapper instead of creating Futures directly #896
  • Add test utilities to aiohttp #902
  • Improve Request.__repr__ #875
  • Skip DNS resolving if provided host is already an ip address #874
  • Add headers to ClientSession.ws_connect #785
  • Document that server can send pre-compressed data #906
  • Don’t add Content-Encoding and Transfer-Encoding if no body #891
  • Add json() convenience methods to websocket message objects #897
  • Add client_resp.raise_for_status() #908
  • Implement cookie filter #799
  • Include an example of middleware to handle error pages #909
  • Fix error handling in StaticFileMixin #856
  • Add mocked request helper #900
  • Fix empty ALLOW Response header for cls based View #929
  • Respect CONNECT method to implement a proxy server #847
  • Add pytest_plugin #914
  • Add tutorial
  • Add backlog option to support more than 128 (default value in “create_server” function) concurrent connections #892
  • Allow configuration of header size limits #912
  • Separate sending file logic from StaticRoute dispatcher #901
  • Drop deprecated share_cookies connector option (BACKWARD INCOMPATIBLE)
  • Drop deprecated support for tuple as auth paramter. Use aiohttp.BasicAuth instead (BACKWARD INCOMPATIBLE)
  • Remove deprecated request.payload property, use content instead. (BACKWARD INCOMPATIBLE)
  • Drop all mentions about api changes in documentaion for versions older than 0.16
  • Allow to override default cookie jar #963
  • Add manylinux wheel builds
  • Dup a socket for sendfile usage #964
File Type Py Version Uploaded on Size
aiohttp-0.22.5-cp34-cp34m-manylinux1_i686.whl (md5) Python Wheel cp34 2016-08-02 142KB
aiohttp-0.22.5-cp34-cp34m-manylinux1_x86_64.whl (md5) Python Wheel cp34 2016-08-02 144KB
aiohttp-0.22.5-cp34-cp34m-win_amd64.whl (md5) Python Wheel cp34 2016-08-02 126KB
aiohttp-0.22.5-cp35-cp35m-manylinux1_i686.whl (md5) Python Wheel cp35 2016-08-02 142KB
aiohttp-0.22.5-cp35-cp35m-manylinux1_x86_64.whl (md5) Python Wheel cp35 2016-08-02 144KB
aiohttp-0.22.5-cp35-cp35m-win32.whl (md5) Python Wheel cp35 2016-08-02 126KB
aiohttp-0.22.5-cp35-cp35m-win_amd64.whl (md5) Python Wheel cp35 2016-08-02 128KB
aiohttp-0.22.5.tar.gz (md5) Source 2016-08-02 464KB