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)

Лучшие практики

  1. Всегда проверяйте response.status_code
  2. Используйте raise_for_status() для обработки ошибок
  3. Устанавливайте разумные таймауты
  4. Закрывайте соединения (или используйте with)
  5. Логируйте запросы для отладки

🚀 Теперь вы готовы к профессиональной работе с HTTP в Python! Практикуйтесь на реальных API и создавайте мощные приложения.

Скрыть рекламу навсегда

🧠 Учёба без воды и зубрёжки

Закрытый Boosty с наработками опытного преподавателя.

Объясняю сложное так, чтобы щелкнуло.

🚀 Забрать доступ к Boosty