Welcome to AIOHTTP¶
Asynchronous HTTP Client/Server for asyncio and Python.
Current version is 4.0.0a2.dev0.
Key Features¶
Supports both Client and HTTP Server.
Supports both Server WebSockets and Client WebSockets out-of-the-box without the Callback Hell.
Web-server has Middlewares, Signals and pluggable routing.
Library Installation¶
$ pip install aiohttp
For speeding up DNS resolving by client API you may install aiodns as well. This option is highly recommended:
$ pip install aiodns
Installing all speedups in one command¶
The following will get you aiohttp
along with aiodns and Brotli
in one
bundle.
No need to type separate commands anymore!
$ pip install aiohttp[speedups]
Getting Started¶
Client example¶
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 example:¶
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)
Development mode¶
When writing your code, we recommend enabling Python’s
development mode
(python -X dev
). In addition to the extra features enabled for asyncio, aiohttp
will:
Use a strict parser in the client code (which can help detect malformed responses from a server).
Enable some additional checks (resulting in warnings in certain situations).
What’s new in aiohttp 3?¶
Go to What’s new in aiohttp 3.0 page for aiohttp 3.0 major release changes.
Tutorial¶
Source code¶
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.
Dependencies¶
multidict
yarl
Optional aiodns for fast DNS resolving. The library is highly recommended.
$ pip install aiodns
Optional Brotli or brotlicffi for brotli (RFC 7932) client compression support.
$ pip install Brotli
Communication channels¶
aio-libs Discussions: https://github.com/aio-libs/aiohttp/discussions
Feel free to post your questions and ideas here.
Matrix: #aio-libs:matrix.org
We support Stack Overflow. Please add aiohttp tag to your question there.
Contributing¶
Please read the instructions for contributors before making a Pull Request.
Policy for Backward Incompatible Changes¶
aiohttp keeps backward compatibility.
When a new release is published that deprecates a Public API (method, class, function argument, etc.), the library will guarantee its usage for at least a year and half from the date of release.
Deprecated APIs are reflected in their documentation, and their use will raise
DeprecationWarning
.
However, if there is a strong reason, we may be forced to break this guarantee. The most likely reason would be a critical bug, such as a security issue, which cannot be solved without a major API change. We are working hard to keep these breaking changes as rare as possible.
Table Of Contents¶
- Client
- Server
- Utilities
- FAQ
- Are there plans for an @app.route decorator like in Flask?
- Does aiohttp have a concept like Flask’s “blueprint” or Django’s “app”?
- How do I create a route that matches urls with a given prefix?
- Where do I put my database connection so handlers can access it?
- How can middleware store data for web handlers to use?
- Can a handler receive incoming events from different sources in parallel?
- How do I programmatically close a WebSocket server-side?
- How do I make a request from a specific IP address?
- What is the API stability and deprecation policy?
- How do I enable gzip compression globally for my entire application?
- How do I manage a ClientSession within a web server?
- How do I access database connections from a subapplication?
- How do I perform operations in a request handler after sending the response?
- How do I make sure my custom middleware response will behave correctly?
- Why is creating a ClientSession outside of an event loop dangerous?
- Miscellaneous
- Who uses aiohttp?
- Contributing