Библиотека httpx в Python - это

Tags:

Published 13 августа 2025 г. 15:39 by max_summer

httpx — это современная, асинхронная и синхронная HTTP-библиотека для Python, разработанная как улучшенная альтернатива requests с поддержкой HTTP/2, асинхронных запросов (на основе asyncio) и других продвинутых функций.


Основные особенности httpx:

  1. Поддержка синхронного и асинхронного кода
  2. Можно использовать как в обычном (requests-подобном) стиле, так и в асинхронном режиме с async/await.
  3. Пример: ```python # Синхронный запрос import httpx response = httpx.get("https://httpbin.org/get") print(response.json())

    # Асинхронный запрос async with httpx.AsyncClient() as client: response = await client.get("https://httpbin.org/get") print(response.json()) ```

  4. Поддержка HTTP/2

  5. В отличие от requests, httpx поддерживает протокол HTTP/2 (по умолчанию используется HTTP/1.1, но можно явно указать версию).

  6. Клиентские сессии (Client)

  7. Позволяет переиспользовать TCP-соединения (keep-alive), что ускоряет повторные запросы.
  8. Пример: python with httpx.Client() as client: response1 = client.get("https://httpbin.org/get") response2 = client.post("https://httpbin.org/post", data={"key": "value"})

  9. Поддержка прокси, аутентификации, кук, заголовков

  10. Легко настраиваются прокси, базовая/дайджест-аутентификация, куки и кастомные заголовки.
  11. Пример с аутентификацией: python response = httpx.get( "https://httpbin.org/basic-auth/user/passwd", auth=("user", "passwd") )

  12. Работа с JSON, формами, файлами

  13. Автоматическое кодирование/декодирование JSON, отправка мультипарт-форм (например, для загрузки файлов).
  14. Пример: python files = {"file": open("example.txt", "rb")} response = httpx.post("https://httpbin.org/post", files=files)

  15. Timeouts и ретраи (повторные попытки)

  16. Гибкая настройка таймаутов и автоматических повторных запросов при сбоях.
  17. Пример: python response = httpx.get( "https://httpbin.org/delay/5", timeout=10.0, # Таймаут в секундах )

  18. Поддержка Type Hints (аннотации типов)

  19. Код httpx хорошо аннотирован, что упрощает работу с IDE (автодополнение, проверка типов).

  20. Расширяемость

  21. Можно добавлять кастомные транспорты, обработчики ошибок, мидлвары.

  22. Совместимость с requests

  23. Синтаксис во многом похож на requests, что облегчает переход.

Установка

bash pip install httpx Для поддержки HTTP/2 может потребоваться дополнительная зависимость: bash pip install httpx[http2]


Примеры использования

1. Простой GET-запрос

```python import httpx

response = httpx.get("https://httpbin.org/get") print(response.status_code) # 200 print(response.json()) # Парсинг JSON-ответа ```

2. POST-запрос с JSON

python data = {"key": "value"} response = httpx.post("https://httpbin.org/post", json=data) print(response.json())

3. Асинхронный запрос

```python import httpx import asyncio

async def fetch_data(): async with httpx.AsyncClient() as client: response = await client.get("https://httpbin.org/get") print(response.json())

asyncio.run(fetch_data()) ```

4. Загрузка файла

python files = {"file": ("example.txt", open("example.txt", "rb"))} response = httpx.post("https://httpbin.org/post", files=files) print(response.json())

5. Использование прокси

python proxies = {"http://": "http://proxy.example.com:8080"} response = httpx.get("https://httpbin.org/get", proxies=proxies)


Сравнение с requests и aiohttp

| Feature | httpx | requests | aiohttp | |------------------|-----------------------|---------------------|--------------------| | Синхронность | Да (+асинхронность) | Да | Нет (только async) | | HTTP/2 | Да | Нет | Да | | Асинхронность| Да | Нет | Да | | Простота | Высокая | Очень высокая | Средняя | | Сессии | Да (Client) | Да (Session) | Да (ClientSession)| | Type Hints | Да | Нет | Частично |


Когда использовать httpx?


Документация

httpx — отличный выбор для современных Python-приложений, особенно если нужна гибкость между синхронным и асинхронным кодом.

Share this post

Similar posts

There are no similar posts yet.

0 comments

There are no comments

Add a new comment