Посоветуйте библиотеку для асинхронных запросов, аналог requests

Рейтинг: 1Ответов: 1Опубликовано: 22.06.2023

В общем пишу телеграм бота и использую там библиотеку requests, оказалось что она не работает в асинхроне и ищу аналог. Посоветуйте, пожалуйста, библиотеку для получения кода страницы, которая будет работать в асинхроне

Ответы

▲ 6Принят

Мне известно дветри таких библиотеки:

aiohttp

Позволяет реализовывать как асинхронный клиенты, так и асинхронные серверы. Пример асинхронного http запроса (скопировано из документации: Client Quickstart):

import aiohttp
import asyncio

async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get('http://httpbin.org/get') as resp:
            print(resp.status)
            print(await resp.text())

asyncio.run(main())

httpx

Только клиент, может использоваться для синхронных и асинхронных http запросов. Пример асинхронного запроса:

import asyncio
import httpx

async def main():
    async with httpx.AsyncClient() as client:
        response = await client.get('https://www.example.com/')
        print(response)

asyncio.run(main())

Опять же, пример взят из документации: Async Support

niquests

Форк requests c дополнительными фичами, в том числе с поддержкой асинхронности.

Пример кода с асинхронностью на основе примера из readme:

import niquests
import asyncio


async def main():
    s = niquests.AsyncSession()
    r = await s.get('https://pie.dev/basic-auth/user/pass', auth=('user', 'pass'), stream=True)
    print(r)
    print(await r.json())


asyncio.run(main())

Сессию также можно использовать как менеджер контекста, аналогично предыдущим библиотекам:

    async with niquests.AsyncSession() as s:
        r = await s.get('https://pie.dev/basic-auth/user/pass', auth=('user', 'pass'), stream=True)
        print(r)
        print(await r.json())

Документация: Quickstart - Async session (и разделы ниже).