Skip to main content
Python Software Foundation 20th Year Anniversary Fundraiser  Donate today!

http client/server for asyncio

Project description

http client/server for asyncio

aiohttp logo


  • 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.0 (XX-XX-XXXX)

  • 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

Project details

Release history Release notifications | RSS feed

Download files

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

Files for aiohttp, version 0.22.0b3
Filename, size File type Python version Upload date Hashes
Filename, size aiohttp-0.22.0b3-cp34-cp34m-win32.whl (128.0 kB) File type Wheel Python version cp34 Upload date Hashes View
Filename, size aiohttp-0.22.0b3-cp35-cp35m-win_amd64.whl (130.4 kB) File type Wheel Python version cp35 Upload date Hashes View
Filename, size aiohttp-0.22.0b3.tar.gz (474.2 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page