skip to navigation
skip to content

Not Logged In

aiohttp 0.15.3

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.



aiohttp is offered under the Apache 2 license.

Source code

The latest developer version is available in a github repository:

Getting started


To retrieve something from the web:

import aiohttp
import asyncio

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

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

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

response = yield from aiohttp.request('GET', '')
body = yield from

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

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


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

This is simple usage example:

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

    while True:
        msg = yield from ws.receive()

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

    return ws

def init(loop):
    app = web.Application(loop=loop)
    app.router.add_route('GET', '/echo', wshandler)
    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()


0.15.3 (04-22-2015)

  • Fix graceful shutdown handling
  • Fix Expect header handling for not found and not allowed routes #340

0.15.2 (04-19-2015)

  • Flow control subsystem refactoring
  • Http server performace optimizations
  • Allow to match any request method with *
  • Explicitly call drain on transport #316
  • Make chardet module dependency mandatory #318
  • Support keep-alive for HTTP 1.0 #325
  • Do not chunk single file during upload #327
  • Add ClientSession object for cookie storage and default headers #328
  • Add keep_alive_on argument for http server handler.

0.15.1 (03-31-2015)

  • Pass Autobahn Testsuit tests
  • Fixed websocket fragmentation
  • Fixed websocket close procedure
  • Fixed parser buffer limits
  • Added timeout parameter to WebSocketResponse ctor
  • Added WebSocketResponse.close_code attribute

0.15.0 (03-27-2015)

  • Client WebSockets support
  • New Multipart system #273
  • Support for “Except” header #287 #267
  • Set default Content-Type for post requests #184
  • Fix issue with construction dynamic route with regexps and trailing slash #266
  • Add repr to web.Request
  • Add repr to web.Response
  • Add repr for NotFound and NotAllowed match infos
  • Add repr for web.Application
  • Add repr to UrlMappingMatchInfo #217
  • Gunicorn 19.2.x compatibility
File Type Py Version Uploaded on Size
aiohttp-0.15.3.tar.gz (md5) Source 2015-04-22 444KB
  • Downloads (All Versions):
  • 8580 downloads in the last day
  • 27133 downloads in the last week
  • 41780 downloads in the last month