aiohttp README

The project's README from github.com/aio-libs/aiohttp. As one markdown file: README.md.

================================== Async http client/server framework

.. image:: https://raw.githubusercontent.com/aio-libs/aiohttp/master/docs/aiohttp-plain.svg :height: 64px :width: 64px :alt: aiohttp logo

|

.. image:: https://github.com/aio-libs/aiohttp/workflows/CI/badge.svg :target: https://github.com/aio-libs/aiohttp/actions?query=workflow%3ACI :alt: GitHub Actions status for master branch

.. image:: https://codecov.io/gh/aio-libs/aiohttp/branch/master/graph/badge.svg :target: https://codecov.io/gh/aio-libs/aiohttp :alt: codecov.io status for master branch

.. image:: https://badge.fury.io/py/aiohttp.svg :target: https://pypi.org/project/aiohttp :alt: Latest PyPI package version

.. image:: https://img.shields.io/pypi/dm/aiohttp :target: https://pypistats.org/packages/aiohttp :alt: Downloads count

.. image:: https://readthedocs.org/projects/aiohttp/badge/?version=latest :target: https://docs.aiohttp.org/ :alt: Latest Read The Docs

.. image:: https://img.shields.io/endpoint?url=https://codspeed.io/badge.json :target: https://codspeed.io/aio-libs/aiohttp :alt: Codspeed.io status for aiohttp

Key Features

Getting started

Client

To get something from the web:

.. code-block:: python

import aiohttp import asyncio

async def main():

  async with aiohttp.ClientSession() as session:
      async with session.get('https://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:

.. code-block::

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

Coming from requests <https://requests.readthedocs.io/>_ ? Read why we need so many lines <https://aiohttp.readthedocs.io/en/latest/http_request_lifecycle.html>_.

Server

An example using a simple server:

.. code-block:: python

# 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

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 <https://matrix.to/#/#aio-libs:matrix.org>_

We support Stack Overflow <https://stackoverflow.com/questions/tagged/aiohttp>_. Please add aiohttp tag to your question there.

Requirements

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

.. _aiodns: https://pypi.python.org/pypi/aiodns .. _multidict: https://pypi.python.org/pypi/multidict .. _frozenlist: https://pypi.org/project/frozenlist/ .. _yarl: https://pypi.python.org/pypi/yarl

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


.. image:: https://img.shields.io/matrix/aio-libs:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs%3Amatrix.org&logo=matrix&server_fqdn=matrix.org&style=flat :target: https://matrix.to/#/%23aio-libs:matrix.org :alt: Matrix Room — #aio-libs:matrix.org

.. image:: https://img.shields.io/matrix/aio-libs-space:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs-space%3Amatrix.org&logo=matrix&server_fqdn=matrix.org&style=flat :target: https://matrix.to/#/%23aio-libs-space:matrix.org :alt: Matrix Space — #aio-libs-space:matrix.org

.. image:: https://insights.linuxfoundation.org/api/badge/health-score?project=aiohttp :target: https://insights.linuxfoundation.org/project/aiohttp :alt: LFX Health Score

aiohttp (aio-libs/aiohttp)

Searching Database…

16.6K ·GitHub
这是什么?aiohttp 是一个基于 asyncio 的异步 HTTP 客户端和服务器框架:一个 Python 包既能用来发 HTTP 请求,也能用来开发 Web 应用,并且开箱即支持 WebSocket。
它是我在代码里导入的库,还是托管整个应用的框架?两者都包含在同一个包里:作为客户端,它是一个你调用的库(aiohttp.ClientSession);作为服务器,它是一个框架——你编写处理函数,把路由加到 web.Application 上,再用 web.run_app 启动。
我怎么用它发出第一个请求?先从 PyPI 安装(pip install aiohttp),然后在一个 async 函数里操作:创建一个 ClientSession,调用 session.get(url) 得到响应,再用 await response.text() 获取响应内容。
除了 Python 本身,它还依赖什么?有三个必装包:multidict、yarl 和 frozenlist。另外可选装 aiodns——README 称它对提升速度非常有用,强烈推荐。
我已经在用 requests 了,换过来麻烦吗?aiohttp 的代码是异步的,所以完成同样的任务比用 requests 要写更多行——README 甚至专门为从 requests 过来的用户链接了一篇解释“为什么需要这么多行”的文章。
我能用它搭建 Web 服务器,而不只是调用别人的接口吗?可以——处理函数就是普通的 async 函数:把它们连同路由一起注册到 web.Application 上(路径段支持 /{name} 这种写法),然后用 web.run_app(app) 启动即可。中间件和可插拔路由都是内置的。
它两端都支持 WebSocket 吗?支持——客户端和服务器端的 WebSocket 都是开箱即用,README 里的服务器示例就是一个回声 WebSocket 处理函数,而且它的异步 API 宣称可以避免回调地狱。
用它之前我需要先懂 asyncio 吗?需要——aiohttp 是为 asyncio 打造的,所以你要用 async def 写协程并配合 await,再用 asyncio.run(main()) 启动,入门示例正是这么写的。
它真的快吗?README 自己没有公布任何性能数字——只是告诉关心效率的读者去看 AsyncIO 社区在官方 wiki 上维护的基准测试列表。
What are similar projects?starlette, Perfect, uvicorn, guzzle, actix-web, martini, ktor, koa
Creator
aio-libs
Size
44.7 MB
Stars
16.6K
Age
13y
Commits · 90 Days