HTTP-запросы с помощью библиотеки requests
Библиотека requests: ваш проводник в мир HTTP
Библиотека requests — это стандарт де-факто для работы с HTTP-запросами в Python. Она превращает сложные операции в простые и элегантные решения. Давайте разберёмся, как ей пользоваться!
Установка и первый запрос
Перед началом работы установите библиотеку через pip:
pip install requests
Теперь сделаем простой GET-запрос к публичному API:
import requests
response = requests.get('https://api.github.com')
print(response.status_code) # 200 — успешный запрос
print(response.json()) # Выведет ответ в формате JSON
🔍 Что здесь происходит?
1. requests.get() отправляет GET-запрос
2. status_code показывает статус ответа
3. .json() автоматически преобразует ответ в Python-объект
Основные типы HTTP-запросов
Библиотека requests поддерживает все основные методы HTTP:
# POST-запрос с данными
response = requests.post('https://httpbin.org/post', data={'key': 'value'})
# PUT-запрос для обновления данных
response = requests.put('https://httpbin.org/put', data={'key': 'new-value'})
# DELETE-запрос
response = requests.delete('https://httpbin.org/delete')
💡 Профессиональный совет: Все методы (
get,post,put,deleteи другие) имеют схожий синтаксис, что делает API очень последовательным.
Работа с параметрами и заголовками
Часто нужно передавать параметры в URL или устанавливать кастомные заголовки:
# Параметры URL (автоматически экранируются)
params = {'q': 'python requests', 'page': 1}
response = requests.get('https://google.com/search', params=params)
# Кастомные заголовки
headers = {'User-Agent': 'MyApp/1.0'}
response = requests.get('https://api.example.com', headers=headers)
🌐 Важно: Всегда устанавливайте User-Agent для идентификации вашего приложения!
Обработка JSON-данных
Современные API часто используют JSON для обмена данными:
# Отправка JSON
data = {'name': 'John', 'age': 30}
response = requests.post('https://api.example.com/users', json=data)
# Чтение JSON-ответа
user_data = response.json()
print(user_data['id']) # Доступ к полям ответа
📌 Запомните: Используйте параметр json=, а не data= для автоматической сериализации!
Обработка ошибок и таймауты
Настоящий профессионал всегда обрабатывает ошибки:
try:
response = requests.get('https://api.example.com', timeout=5)
response.raise_for_status() # Вызовет исключение для 4XX/5XX ответов
except requests.exceptions.RequestException as e:
print(f"Ошибка запроса: {e}")
⏱️ Таймауты — обязательно устанавливайте разумное время ожидания, чтобы ваше приложение не "зависало".
Работа с сессиями
Для повторяющихся запросов к одному серверу используйте сессии:
with requests.Session() as session:
session.headers.update({'Authorization': 'Bearer token123'})
# Все запросы в сессии будут использовать общие настройки
response1 = session.get('https://api.example.com/items')
response2 = session.post('https://api.example.com/orders')
🔄 Преимущества сессий:
- Общие заголовки и cookies
- Соединение сохраняется между запросами
- Удобно для авторизации
Пример из реального мира: работа с GitHub API
Давайте получим список репозиториев пользователя:
response = requests.get(
'https://api.github.com/users/danilabezhin/repos',
headers={'Accept': 'application/vnd.github.v3+json'}
)
repos = response.json()
for repo in repos:
print(repo['name'], repo['html_url'])
💻 Интересный факт: Этот код использует реальное API GitHub и может показать вам репозитории преподавателя Данилы Бежина!
Продвинутые техники
1. Streaming-запросы для больших файлов:
r = requests.get('https://example.com/bigfile', stream=True)
for chunk in r.iter_content(chunk_size=8192):
process_chunk(chunk)
2. Прокси-серверы:
proxies = {'http': 'http://proxy.example.com', 'https': 'https://proxy.example.com'}
requests.get('http://example.org', proxies=proxies)
3. SSL-верификация:
# Только для тестирования!
requests.get('https://example.com', verify=False)
Лучшие практики
- Всегда проверяйте
response.status_code - Используйте
raise_for_status()для обработки ошибок - Устанавливайте разумные таймауты
- Закрывайте соединения (или используйте
with) - Логируйте запросы для отладки
🚀 Теперь вы готовы к профессиональной работе с HTTP в Python! Практикуйтесь на реальных API и создавайте мощные приложения.