requests — HTTP для Людей™

Хотя в Python есть встроенный urllib, именно пакет requests считается мировым де-факто стандартом для сетевых HTTP-запросов в языке. Это сторонняя библиотека, но без неё не обходится ни один серьезный проект, поэтому её часто включают в шпаргалки наравне со стандартными модулями.

Внимание: Это сторонняя библиотека. Установите её: pip install requests.

import requests

Простой GET-запрос

Отправка запросов через requests невероятно проста. Смотрите, как легко достать готовый словарь, ответственный за разбор JSON (даже не нужно импортировать модуль json):

import requests

# Делаем простой запрос GET
response = requests.get('https://api.github.com/events')

# Проверка статус-кода (200 - Ок, 404 - Не найдено)
print(response.status_code)

# Получение текстового содержимого (HTML-код или ответ сервера)
print(response.text)

# Встроенный парсинг JSON ответа!
data = response.json()
print(data[0]['id'])

Отправка данных (POST-запрос)

Отправка форм, загрузка файлов и передача JSON происходят магически без ручной настройки заголовков!

import requests

url = 'https://httpbin.org/post'
payload = {'username': 'bob', 'password': '123'}

# 1. Отправить как обычную форму браузере (x-www-form-urlencoded):
r1 = requests.post(url, data=payload)

# 2. Отправить как чистый JSON-объект!
# Библиотека САМА поставит заголовок 'Content-Type: application/json'
r2 = requests.post(url, json=payload)

Параметры и заголовки

Безопасное добавление параметров к URL-адресу (строит ссылку за вас) и авторизация:

import requests

url = 'https://api.example.com/search'
query_params = {'limit': 10, 'search': 'python requests'}
headers = {'Authorization': 'Bearer ВАШ_ТОКЕН'}

# Важно: всегда используйте `timeout`, иначе скрипт может зависнуть навечно,
# если сервер просто перестанет отвечать!
response = requests.get(
    url, 
    params=query_params, 
    headers=headers,
    timeout=5 
)

Полный справочник API (API Reference)

Базовые функции запросов

Каждая из этих функций возвращает объект результата Response.

Метод Описание
requests.get(url, params=None, **kwargs) Отправляет запрос GET. В params можно передать словарь url-переменных запроса.
requests.post(url, data=None, json=None) Отправляет POST. Аргумент data используется для форм и файлов. Аргумент json для прямой отправки JSON-структур.
requests.put(url, data=None) Отправляет запрос PUT для изменения ресурса.
requests.delete(url) Отправляет запрос DELETE.

Важные параметры запроса (**kwargs)

Могут быть переданы в любую функцию (get, post...).

Параметр Описание
headers=dict Словарь с кастомными HTTP-заголовками пользователя.
cookies=dict Словарь для отправки готовых "куки"-файлов.
auth=(user, pwd) Кортеж логин-пароль для простой Basic/Digest авторизации.
timeout=int Сколько секунд скрипт должен ЖДАТЬ ответа на запрос (выдает Timeout Exception).

Свойства объекта Response (Ответ)

Свойство / Метод Описание
response.text Строка str (Юникод) с текстовым телом ответа сервера.
response.content Сырая строка байт bytes тела ответа (Используйте для скачивания картинок, zip-файлов).
response.json() Метод, автоматически декодирующий ответ в Python-словарь или список.
response.status_code Число int HTTP кода возврата (например 200).
response.ok Булево свойство. Истинно, если status_code < 400.
response.headers Нечувствительный к регистру букв словарь всех заголовков, присланных сервером в ответ на наш запрос.
response.raise_for_status() Вызывает исключение (краш ошибки HTTPError), если сервер ответил статусом 4xx или 5xx. Очень удобно, чтобы стопнуть код при неудаче.