HTTP-клиенты для агентов: httpx и requests
Синхронные и асинхронные HTTP-запросы, управление сеансами и заголовками.
«HTTP-клиенты для агентов: httpx и requests» — бесплатный урок AI Agents на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Зачем агентам нужны HTTP-клиенты
AI-агентам часто требуется получать данные из внешних источников: API, веб-сайтов и сервисов. Надёжный HTTP-клиент — основной инструмент в арсенале любого агента.
В Python есть две популярные библиотеки HTTP: requests (синхронная и простая) и httpx (поддерживает синхронный и асинхронный режимы). Для создания эффективных агентов важно понимать, когда использовать каждую из них.
Базовый GET-запрос с requests
Библиотека requests упрощает выполнение обычных HTTP-вызовов. Используйте requests.get(url), чтобы получить ресурс и изучить ответ.
Всегда проверяйте код состояния перед использованием тела ответа, чтобы избежать незаметных сбоев.
import requests
url = 'https://api.example.com/data'
response = requests.get(url)
print(response.status_code) # 200
print(response.text) # raw string body
print(response.json()) # parsed JSON dictДобавление заголовков и времени ожидания
Для большинства API требуются заголовки аутентификации. Параметр headers= позволяет передать словарь заголовков. Всегда задавайте timeout=, чтобы агент не зависал навсегда при работе с медленным сервером.
import requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Accept': 'application/json'
}
response = requests.get(
'https://api.example.com/items',
headers=headers,
timeout=10 # seconds
)
data = response.json()
print(data)raise_for_status() — быстрый отказ при ошибках
response.raise_for_status() вызывает HTTPError для кодов состояния 4xx и 5xx. Без этого ответа с кодом 404 или 500 молча считаются успешными.
Это рекомендуемый подход при создании агентов: явно сообщайте об ошибках, чтобы агент знал, когда повторить попытку или сообщить об ошибке.
import requests
try:
response = requests.get('https://api.example.com/missing', timeout=10)
response.raise_for_status() # raises if status >= 400
data = response.json()
except requests.HTTPError as e:
print(f'HTTP error: {e}')
except requests.RequestException as e:
print(f'Network error: {e}')Введение в httpx
httpx — современный HTTP-клиент с тем же интерфейсом, что и requests, но с поддержкой асинхронного режима. Он также по умолчанию устанавливает ограничения времени ожидания, что делает его безопаснее для производственных агентов.
Установите его с помощью pip install httpx. Синхронное использование почти идентично requests.
import httpx
response = httpx.get(
'https://api.example.com/data',
headers={'Authorization': 'Bearer YOUR_KEY'},
timeout=10.0
)
response.raise_for_status()
data = response.json()
print(data)Асинхронный HTTP с httpx.AsyncClient
Когда Ваш агент работает в асинхронном контексте, например с FastAPI или asyncio, используйте httpx.AsyncClient, чтобы не блокировать цикл событий. Оберните его в async with, чтобы соединение гарантированно закрывалось надлежащим образом.
import httpx
import asyncio
async def fetch_data(url: str) -> dict:
async with httpx.AsyncClient(timeout=10.0) as client:
response = await client.get(
url,
headers={'Authorization': 'Bearer YOUR_KEY'}
)
response.raise_for_status()
return response.json()
# result = asyncio.run(fetch_data('https://api.example.com/data'))Параллельное выполнение нескольких асинхронных запросов
Одно из главных преимуществ асинхронного HTTP — одновременное получение нескольких URL с помощью asyncio.gather(). Это может значительно ускорить работу агентов, которым перед ответом нужны данные из нескольких конечных точек.
import httpx
import asyncio
async def fetch_all(urls: list) -> list:
async with httpx.AsyncClient(timeout=10.0) as client:
tasks = [client.get(url) for url in urls]
responses = await asyncio.gather(*tasks)
return [r.json() for r in responses]
urls = [
'https://api.example.com/item/1',
'https://api.example.com/item/2',
'https://api.example.com/item/3'
]
# results = asyncio.run(fetch_all(urls))Повторное использование сеансов и объединение соединений
Создание нового HTTP-соединения для каждого запроса выполняется медленно. Обе библиотеки поддерживают объединение соединений: requests.Session и httpx.Client повторно используют TCP-соединения и передают общие заголовки и файлы cookie между запросами.
Это особенно полезно для агентов, которые выполняют много вызовов к одному API.
import httpx
# Create once, reuse for many requests
client = httpx.Client(
base_url='https://api.example.com',
headers={'Authorization': 'Bearer YOUR_KEY'},
timeout=10.0
)
response1 = client.get('/users')
response2 = client.get('/items')
response3 = client.get('/orders')
client.close() # always close when doneОтправка POST-запросов с телом JSON
Агентам часто нужно не только читать данные, но и отправлять их. Используйте параметр json=, чтобы автоматически сериализовать словарь Python и задать правильный заголовок Content-Type.
import httpx
payload = {
'query': 'latest AI news',
'max_results': 5,
'language': 'en'
}
response = httpx.post(
'https://api.example.com/search',
json=payload,
headers={'Authorization': 'Bearer YOUR_KEY'},
timeout=15.0
)
response.raise_for_status()
results = response.json()
print(results['items'])Разбор ответа: текст, json и content
У объекта ответа есть три основных свойства тела:
.text— декодированная строка (HTML, XML или обычный текст).json()— преобразует JSON в словарь или список Python.content— необработанные байты (для изображений или двоичных файлов)
Выбирайте подходящее свойство в зависимости от типа содержимого, указанного API.
import httpx
response = httpx.get('https://api.example.com/report', timeout=10.0)
# For JSON APIs
data = response.json() # dict or list
# For HTML or plain text
html = response.text # str
# For binary files
image_bytes = response.content # bytes
print(type(data), type(html), type(image_bytes))Объединяем всё: инструмент получения данных по HTTP для агента
Ниже приведена полная универсальная функция получения данных, которую агент может вызывать как инструмент. Она корректно обрабатывает ошибки, записывает запрос в журнал и возвращает структурированные данные.
Этот шаблон служит надёжной основой для любого инструмента агента, получающего данные из веб-источников.
import httpx
import logging
logger = logging.getLogger(__name__)
def agent_fetch(url: str, headers: dict = None) -> dict:
try:
response = httpx.get(
url,
headers=headers or {},
timeout=10.0
)
response.raise_for_status()
logger.info(f'Fetched {url} -> {response.status_code}')
return {'success': True, 'data': response.json()}
except httpx.HTTPStatusError as e:
return {'success': False, 'error': str(e)}
except httpx.RequestError as e:
return {'success': False, 'error': f'Network error: {e}'}Проверка знаний: HTTP-клиенты
Проверьте, насколько хорошо Вы понимаете использование HTTP-клиентов в агентах.
Повторение: HTTP-клиенты для агентов
В этом уроке Вы узнали, как оснастить агентов надёжными возможностями получения данных по HTTP:
- Используйте
requestsдля простого синхронного получения данных - Используйте
httpx.AsyncClientдля неблокирующих асинхронных запросов - Всегда задавайте
timeout=и вызывайтеraise_for_status() - Повторно используйте сеансы и клиенты для нескольких вызовов к одному узлу
- Используйте
.json(),.textили.contentв зависимости от типа ответа
Хорошо написанный инструмент получения данных служит связующим звеном между Вашим агентом и веб-средой.
Изучай AI Agents с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 60
- Уроки
- 239
Часто задаваемые вопросы
Урок «HTTP-клиенты для агентов: httpx и requests» бесплатный?
Да — полный текст урока «HTTP-клиенты для агентов: httpx и requests» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «HTTP-клиенты для агентов: httpx и requests»?
Синхронные и асинхронные HTTP-запросы, управление сеансами и заголовками. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «HTTP-клиенты для агентов: httpx и requests»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- HTTP-клиенты для агентов: httpx и requests
- Разбор HTML с помощью BeautifulSoup
- Обработка разбиения на страницы и динамического содержимого
- Корректные методы веб-скрейпинга