Skip to main content

http client/server for asyncio

aiohttp logo https://travis-ci.org/KeepSafe/aiohttp.svg?branch=master https://coveralls.io/repos/KeepSafe/aiohttp/badge.svg?branch=master&service=github https://badge.fury.io/py/aiohttp.svg

Features

  • 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

Client

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, 'http://python.org'))
        print(html)

Server

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 msg.tp == web.MsgType.text:
            ws.send_str("Hello, {}".format(msg.data))
        elif msg.tp == web.MsgType.binary:
            ws.send_bytes(msg.data)
        elif msg.tp == web.MsgType.close:
            break

    return ws


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

web.run_app(app)

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:

@asyncio.coroutine
def coro(...):
    ret = yield from f()

Documentation

http://aiohttp.readthedocs.org/

Discussion list

aio-libs google group: https://groups.google.com/forum/#!forum/aio-libs

Requirements

Optionally you may install cChardet library: https://pypi.python.org/pypi/cchardet/1.0.0

License

aiohttp is offered under the Apache 2 license.

Source code

The latest developer version is available in a github repository: https://github.com/KeepSafe/aiohttp

Benchmarks

If you are interested in by efficiency, AsyncIO community maintains a list of benchmarks on the official wiki: https://github.com/python/asyncio/wiki/Benchmarks

CHANGES

0.21.1 (02-10-2016)

  • Make new resources classes public #767

  • Add router.resources() view

  • Fix cmd-line parameter names in doc

0.21.0 (02-04-2016)

  • Introduce on_shutdown signal #722

  • Implement raw input headers #726

  • Implement web.run_app utility function #734

  • Introduce on_cleanup signal

  • Deprecate Application.finish() / Application.register_on_finish() in favor of on_cleanup.

  • Get rid of bare aiohttp.request(), aiohttp.get() and family in docs #729

  • Deprecate bare aiohttp.request(), aiohttp.get() and family #729

  • Refactor keep-alive support #737:

    • Enable keepalive for HTTP 1.0 by default

    • Disable it for HTTP 0.9 (who cares about 0.9, BTW?)

    • For keepalived connections

      • Send Connection: keep-alive for HTTP 1.0 only

      • don’t send Connection header for HTTP 1.1

    • For non-keepalived connections

      • Send Connection: close for HTTP 1.1 only

      • don’t send Connection header for HTTP 1.0

  • Add version parameter to ClientSession constructor, deprecate it for session.request() and family #736

  • Enable access log by default #735

  • Deprecate app.router.register_route() (the method was not documented intentionally BTW).

  • Deprecate app.router.named_routes() in favor of app.router.named_resources()

  • route.add_static accepts pathlib.Path now #743

  • Add command line support: $ python -m aiohttp.web package.main #740

  • FAQ section was added to docs. Enjoy and fill free to contribute new topics

  • Add async context manager support to ClientSession

  • Document ClientResponse’s host, method, url properties

  • Use CORK/NODELAY in client API #748

  • ClientSession.close and Connector.close are coroutines now

  • Close client connection on exception in ClientResponse.release()

  • Allow to read multipart parts without content-length specified #750

  • Add support for unix domain sockets to gunicorn worker #470

  • Add test for default Expect handler #601

  • Add the first demo project

  • Rename loader keyword argument in web.Request.json method. #646

  • Add local socket binding for TCPConnector #678

Download files

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

Source Distribution

aiohttp-0.21.1.tar.gz (528.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

aiohttp-0.21.1-cp35-cp35m-win_amd64.whl (243.4 kB view details)

Uploaded CPython 3.5mWindows x86-64

aiohttp-0.21.1-cp35-cp35m-win32.whl (235.0 kB view details)

Uploaded CPython 3.5mWindows x86

aiohttp-0.21.1-cp34-cp34m-win_amd64.whl (240.9 kB view details)

Uploaded CPython 3.4mWindows x86-64

aiohttp-0.21.1-cp34-cp34m-win32.whl (235.0 kB view details)

Uploaded CPython 3.4mWindows x86

File details

Details for the file aiohttp-0.21.1.tar.gz.

File metadata

  • Download URL: aiohttp-0.21.1.tar.gz
  • Upload date:
  • Size: 528.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for aiohttp-0.21.1.tar.gz
Algorithm Hash digest
SHA256 e62d4b7e9481cb31bf7460fbfe769acdfc29cb9f63ef99aa56d3855dc02e1b24
MD5 4a0ca375777a388f96038a3a83477a6f
BLAKE2b-256 03c26af04c29a7856f985e81116b6341612889f2789ed654a1166aa217026a4d

See more details on using hashes here.

File details

Details for the file aiohttp-0.21.1-cp35-cp35m-win_amd64.whl.

File metadata

File hashes

Hashes for aiohttp-0.21.1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 2f85c7de51354edff0edfe63827cc8b7192ea32451936615bb57ca6393298d88
MD5 4319cdeb3e3a0b02231b505a8d230a75
BLAKE2b-256 f11350778cc8f3bfcb70394c22e08b4483b2a0c88b59ee614c04c6c6c98562ba

See more details on using hashes here.

File details

Details for the file aiohttp-0.21.1-cp35-cp35m-win32.whl.

File metadata

File hashes

Hashes for aiohttp-0.21.1-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 011dd6bc6573a4ef7f1c8332c4df7335cb45b68f01745331185a4331becc1be6
MD5 2ea4bf74875080705ff990c9df72f6d3
BLAKE2b-256 a4dc75875116b6a458598fdd21bfe38c260ad29374c68d7dacd13ec82c4b9ab1

See more details on using hashes here.

File details

Details for the file aiohttp-0.21.1-cp34-cp34m-win_amd64.whl.

File metadata

File hashes

Hashes for aiohttp-0.21.1-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 03d1055b7e12da708008f6e36ce3930ac83cb3cb2d2961e30a53eeb2c5c452da
MD5 4e01738af772cc752df2cf82fa249627
BLAKE2b-256 6044e45f679db59372f9495b3fb48a388adef779d85b6142edb0acbd34bdce3d

See more details on using hashes here.

File details

Details for the file aiohttp-0.21.1-cp34-cp34m-win32.whl.

File metadata

File hashes

Hashes for aiohttp-0.21.1-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 bc3c13e566d3aa7d7096445b915c7fbe0d5344f47b2b6a8521cf2277272cb91c
MD5 965c7ec89020c6f88d6fcdc1dcaf6aeb
BLAKE2b-256 64c8800d2ca0202f611390345a424be3f58b9c5532d66acb0fd262adb48f90c7

See more details on using hashes here.

Release history Release notifications | RSS feed

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page