Какие основные способы работы с HTTP-запросами существуют в Python

«Какие основные способы работы с HTTP-запросами существуют в Python» — вопрос из категории Сети, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Python существует несколько способов для отправки HTTP-запросов, от высокоуровневых библиотек до низкоуровневых модулей стандартной библиотеки.

1. Библиотека requests (рекомендуемый способ)

requests — это де-факто стандарт для работы с HTTP в Python. Она предоставляет простой и интуитивно понятный API для большинства задач.

Преимущества:

  • Простой синтаксис
  • Автоматическая обработка JSON
  • Управление сессиями, cookies и аутентификацией

Пример GET-запроса:

import requests

try:
    response = requests.get('https://api.github.com/events')
    response.raise_for_status()  # Вызовет исключение для кодов 4xx/5xx
    print(f"Статус-код: {response.status_code}")
    print("Данные:", response.json()[0])
except requests.exceptions.RequestException as e:
    print(f"Ошибка запроса: {e}")

2. Модули стандартной библиотеки (http.client и urllib)

Эти модули встроены в Python и не требуют установки. Они более низкоуровневые и могут быть полезны, когда нет возможности установить внешние зависимости.

  • urllib.request: более высокоуровневый модуль, чем http.client.
    
    from urllib.request import urlopen
    import json

with urlopen('https://api.github.com/events') as response: body = response.read() data = json.loads(body) print(f"Статус-код: {response.status}")


- **`http.client`**: предоставляет низкоуровневый контроль над HTTP-соединением.
```python
from http.client import HTTPSConnection
import json

conn = HTTPSConnection("api.github.com")
# Необходимо вручную установить заголовок User-Agent для API GitHub
headers = {'User-Agent': 'Python-App'}
conn.request("GET", "/events", headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode("utf-8"))
print(f"Статус-код: {response.status}")
conn.close()

Итог: Для большинства повседневных задач requests является лучшим выбором из-за своей простоты и функциональности. urllib и http.client используются в специфических случаях, например, при написании кода для стандартной библиотеки без внешних зависимостей.