Asynchronous HTTP Client/Server for :term:`asyncio` and Python.
Current version is |release|.
- Supports both :ref:`aiohttp-client` and :ref:`HTTP Server <aiohttp-web>`.
- Supports both :ref:`Server WebSockets <aiohttp-web-websockets>` and :ref:`Client WebSockets <aiohttp-client-websockets>` out-of-the-box without the Callback Hell.
- Web-server has :ref:`aiohttp-web-middlewares`, :ref:`aiohttp-web-signals` and plugable routing.
$ pip install aiohttp
You may want to install optional :term:`cchardet` library as faster replacement for :term:`charset-normalizer`:
$ pip install cchardet
For speeding up DNS resolving by client API you may install :term:`aiodns` as well. This option is highly recommended:
$ pip install aiodns
The following will get you aiohttp
along with :term:`cchardet`,
:term:`aiodns` and Brotli
in one bundle. No need to type
separate commands anymore!
$ pip install aiohttp[speedups]
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], "...")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
This prints:
Status: 200
Content-type: text/html; charset=utf-8
Body: <!doctype html> ...
Coming from :term:`requests` ? Read :ref:`why we need so many lines <aiohttp-request-lifecycle>`.
from aiohttp import web
async def handle(request):
name = request.match_info.get('name', "Anonymous")
text = "Hello, " + name
return web.Response(text=text)
app = web.Application()
app.add_routes([web.get('/', handle),
web.get('/{name}', handle)])
if __name__ == '__main__':
web.run_app(app)
For more information please visit :ref:`aiohttp-client` and :ref:`aiohttp-web` pages.
Go to :ref:`aiohttp_whats_new_3_0` page for aiohttp 3.0 major release changes.
:ref:`Polls tutorial <aiohttp-demos-polls-beginning>`
The project is hosted on GitHub
Please feel free to file an issue on the bug tracker if you have found a bug or have some suggestion in order to improve the library.
The library uses Azure Pipelines for Continuous Integration.
Python 3.6+
async_timeout
attrs
charset-normalizer
multidict
yarl
Optional :term:`cchardet` as faster replacement for :term:`charset-normalizer`.
Install it explicitly via:
$ pip install cchardet
Optional :term:`aiodns` for fast DNS resolving. The library is highly recommended.
$ pip install aiodns
Optional :term:`Brotli` for brotli (RFC 7932) client compression support.
$ pip install Brotli
aio-libs discourse group: https://aio-libs.discourse.group
Feel free to post your questions and ideas here.
gitter chat https://gitter.im/aio-libs/Lobby
We support Stack Overflow. Please add aiohttp tag to your question there.
Please read the :ref:`instructions for contributors<aiohttp-contributing>` before making a Pull Request.
The aiohttp
package is written mostly by Nikolay Kim and Andrew Svetlov.
It's Apache 2 licensed and freely available.
Feel free to improve this package and send a pull request to GitHub.
aiohttp keeps backward compatibility.
After deprecating some Public API (method, class, function argument, etc.) the library guaranties the usage of deprecated API is still allowed at least for a year and half after publishing new release with deprecation.
All deprecations are reflected in documentation and raises :exc:`DeprecationWarning`.
Sometimes we are forced to break the own rule for sake of very strong reason. Most likely the reason is a critical bug which cannot be solved without major API change, but we are working hard for keeping these changes as rare as possible.
.. toctree:: :name: mastertoc :maxdepth: 2 client web utilities faq misc external contributing