Библиотека httpx в Python - это
Published 13 августа 2025 г. 15:39 by max_summer
httpx
— это современная, асинхронная и синхронная HTTP-библиотека для Python, разработанная как улучшенная альтернатива requests
с поддержкой HTTP/2, асинхронных запросов (на основе asyncio
) и других продвинутых функций.
Основные особенности httpx
:
- Поддержка синхронного и асинхронного кода
- Можно использовать как в обычном (
requests
-подобном) стиле, так и в асинхронном режиме сasync/await
. -
Пример: ```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()) ```
-
Поддержка HTTP/2
-
В отличие от
requests
,httpx
поддерживает протокол HTTP/2 (по умолчанию используется HTTP/1.1, но можно явно указать версию). -
Клиентские сессии (Client)
- Позволяет переиспользовать TCP-соединения (keep-alive), что ускоряет повторные запросы.
-
Пример:
python with httpx.Client() as client: response1 = client.get("https://httpbin.org/get") response2 = client.post("https://httpbin.org/post", data={"key": "value"})
-
Поддержка прокси, аутентификации, кук, заголовков
- Легко настраиваются прокси, базовая/дайджест-аутентификация, куки и кастомные заголовки.
-
Пример с аутентификацией:
python response = httpx.get( "https://httpbin.org/basic-auth/user/passwd", auth=("user", "passwd") )
-
Работа с JSON, формами, файлами
- Автоматическое кодирование/декодирование JSON, отправка мультипарт-форм (например, для загрузки файлов).
-
Пример:
python files = {"file": open("example.txt", "rb")} response = httpx.post("https://httpbin.org/post", files=files)
-
Timeouts и ретраи (повторные попытки)
- Гибкая настройка таймаутов и автоматических повторных запросов при сбоях.
-
Пример:
python response = httpx.get( "https://httpbin.org/delay/5", timeout=10.0, # Таймаут в секундах )
-
Поддержка Type Hints (аннотации типов)
-
Код
httpx
хорошо аннотирован, что упрощает работу с IDE (автодополнение, проверка типов). -
Расширяемость
-
Можно добавлять кастомные транспорты, обработчики ошибок, мидлвары.
-
Совместимость с
requests
- Синтаксис во многом похож на
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
?
- Нужна асинхронная работа с HTTP (альтернатива
aiohttp
). - Требуется HTTP/2.
- Хочется современный API с поддержкой типов.
- Нужна совместимость с
requests
-подобным синтаксисом, но с расширенными возможностями.
Документация
httpx
— отличный выбор для современных Python-приложений, особенно если нужна гибкость между синхронным и асинхронным кодом.
Similar posts
There are no similar posts yet.
0 comments
There are no comments