skip to navigation
skip to content

aiohttp 0.19.0

http client/server for asyncio

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.


Optionally you may install cChardet library:


aiohttp is offered under the Apache 2 license.

Discussion list

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

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:

Getting started


To retrieve something from the web:

import aiohttp
import asyncio

async def get_body(client, url):
    async with client.get(url) as response:
        return await

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    client = aiohttp.ClientSession(loop=loop)
    raw_html = loop.run_until_complete(get_body(client, ''))

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

yield from asyncio.wait_for(client.get(url), 10)


This is simple usage example:

import asyncio
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

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

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

loop = asyncio.get_event_loop()

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()


0.19.0 (11-25-2015)

  • Memory leak in ParserBuffer #579
  • Suppport gunicorn’s max_requests settings in gunicorn worker
  • Fix wsgi environment building #573
  • Improve access logging #572
  • Drop unused host and port from low-level server #586
  • Add Python 3.5 async for implementation to server websocket #543
  • Add Python 3.5 async for implementation to client websocket
  • Add Python 3.5 async with implementation to client websocket
  • Add charset parameter to web.Response constructor #593
  • Forbid passing both Content-Type header and content_type or charset params into web.Response constructor
  • Forbid duplicating of web.Application and web.Request #602
  • Add an option to pass Origin header in ws_connect #607
  • Add json_response function #592
  • Make concurrent connections respect limits #581
  • Collect history of responses if redirects occur #614
  • Enable passing pre-compressed data in requests #621
  • Expose named routes via UrlDispatcher.named_routes() #622
  • Allow disabling sendfile by environment variable AIOHTTP_NOSENDFILE #629
  • Use ensure_future if available
  • Always quote params for Content-Disposition #641
  • Support async for in multipart reader #640
  • Add Timeout context manager #611
File Type Py Version Uploaded on Size
aiohttp-0.19.0.tar.gz (md5) Source 2015-11-25 2MB
  • Downloads (All Versions):
  • 503 downloads in the last day
  • 6939 downloads in the last week
  • 32081 downloads in the last month