📝 LLM и AI

httpx: современный HTTP-клиент для Python

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
107
🌿
Уровень
Средний
🐦 💼 ✈️

httpx — HTTP-клиент нового поколения. Интерфейс похож на requests, но с поддержкой async/await из коробки.

Установка

uv add httpx

Базовые запросы

import httpx

# GET запрос
response = httpx.get("https://wttr.in/Moscow?format=j1", timeout=10)
response.raise_for_status()  # бросает исключение при 4xx/5xx
data = response.json()

# GET с параметрами
response = httpx.get(
    "https://api.example.com/search",
    params={"q": "python", "limit": 10},
    timeout=10
)

# POST с JSON
response = httpx.post(
    "https://api.example.com/data",
    json={"key": "value"},
    headers={"Authorization": "Bearer token"},
    timeout=10
)

timeout — всегда указывай

# Без timeout запрос может висеть вечно
response = httpx.get(url, timeout=10)      # 10 секунд
response = httpx.get(url, timeout=None)    # без ограничений (плохо)

# Раздельные таймауты
timeout = httpx.Timeout(connect=5.0, read=30.0)
response = httpx.get(url, timeout=timeout)

raise_for_status()

try:
    response = httpx.get(url, timeout=10)
    response.raise_for_status()
    data = response.json()
except httpx.TimeoutException:
    return "Ошибка: сервер не ответил за 10 секунд"
except httpx.HTTPStatusError as e:
    return f"Ошибка {e.response.status_code}: {e.response.text}"

Переиспользование клиента (Client)

# Лучше создать клиент один раз для нескольких запросов
with httpx.Client(timeout=10, base_url="https://api.example.com") as client:
    r1 = client.get("/users")
    r2 = client.get("/posts")

Async клиент

import asyncio
import httpx

async def fetch(url: str) -> dict:
    async with httpx.AsyncClient(timeout=10) as client:
        response = await client.get(url)
        response.raise_for_status()
        return response.json()

# Параллельные запросы
async def fetch_all(urls: list[str]) -> list[dict]:
    async with httpx.AsyncClient(timeout=10) as client:
        tasks = [client.get(url) for url in urls]
        responses = await asyncio.gather(*tasks)
        return [r.json() for r in responses]

httpx vs requests

requests httpx
Sync
Async
HTTP/2
Типизация частично полная
API одинаковое одинаковое

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

Event loop в Python: как asyncio делает «параллел…

Event loop — сердце asyncio. Он не запускает код параллельно в нескольких потоках. Он переключается...

📅 30.06.2026 👁️ 123
📝

pytest-django: тестирование Django

Охватываемые темы: Установка, @pytest.mark.djangodb, Фикстуры, Тестирование views.

📅 30.06.2026 👁️ 132
📝

pip: менеджер пакетов Python

Охватываемые темы: Установка пакетов, Обновление и удаление, requirements.txt, Виртуальное окружение.

📅 30.06.2026 👁️ 120

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!