px
pypx

aiohttp

v3.14.1

Async http client/server framework (asyncio)

437 KB Python 3.10+ platform-specificApache-2.0 AND MIT9 deps
Diff
$ uv add aiohttp

==================================

Async http client/server framework

aiohttp logo

|

GitHub Actions status for master branch codecov.io status for master branch Latest PyPI package version Downloads count Latest Read The Docs Codspeed.io status for aiohttp

Key Features

  • Supports both client and server side of HTTP protocol.
  • Supports both client and server Web-Sockets out-of-the-box and avoids

Callback Hell.

  • Provides Web-server with middleware and pluggable routing.

Getting started

Client

To get something from the web:

import aiohttp
import asyncio

async def main():

    async with aiohttp.ClientSession() as session:
        async with session.get('http://python.org') as response:

            print("Status:", response.status)
            print("Content-type:", response.headers['content-type'])

            html = await response.text()
            print("Body:", html[:15], "...")

asyncio.run(main())

This prints:

Status: 200
Content-type: text/html; charset=utf-8
Body: <!doctype html> ...

Coming from requests ? Read why we need so many lines.

Server

An example using a simple server:

# examples/server_simple.py
from aiohttp import web

async def handle(request):
    name = request.match_info.get('name', "Anonymous")
    text = "Hello, " + name
    return web.Response(text=text)

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

    async for msg in ws:
        if msg.type == web.WSMsgType.text:
            await ws.send_str("Hello, {}".format(msg.data))
        elif msg.type == web.WSMsgType.binary:
            await ws.send_bytes(msg.data)
        elif msg.type == web.WSMsgType.close:
            break

    return ws


app = web.Application()
app.add_routes([web.get('/', handle),
                web.get('/echo', wshandle),
                web.get('/{name}', handle)])

if __name__ == '__main__':
    web.run_app(app)

Documentation

https://aiohttp.readthedocs.io/

Demos

https://github.com/aio-libs/aiohttp-demos

External links

  • `Third party libraries

<http://aiohttp.readthedocs.io/en/latest/third_party.html>`_

  • `Built with aiohttp

<http://aiohttp.readthedocs.io/en/latest/built_with.html>`_

  • `Powered by aiohttp

<http://aiohttp.readthedocs.io/en/latest/powered_by.html>`_

Feel free to make a Pull Request for adding your link to these pages!

Communication channels

aio-libs Discussions: https://github.com/aio-libs/aiohttp/discussions

Matrix: #aio-libs:matrix.org

We support Stack Overflow. Please add aiohttp tag to your question there.

Requirements

  • attrs_
  • multidict_
  • yarl_
  • frozenlist_

Optionally you may install the aiodns_ library (highly recommended for sake of speed).

Keepsafe

The aiohttp community would like to thank Keepsafe (https://www.getkeepsafe.com) for its support in the early days of the project.

Source code

The latest developer version is available in a GitHub repository: https://github.com/aio-libs/aiohttp

Benchmarks

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

--------

Matrix Room — #aio-libs:matrix.org Matrix Space — #aio-libs-space:matrix.org LFX Health Score

Details

Version
3.14.1
License
Apache-2.0 AND MIT
Python
>=3.10

Release Cadence

9
releases in the past year
avg 15 days between releases

Platforms

linuxarm64mac-x86mac-armwinmusl

Maintainers