Requests – работа с HTTP-запросами

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение в Requests

Requests — это простая и мощная библиотека для работы с HTTP-запросами в Python. Она обеспечивает удобный интерфейс для выполнения операций с REST API, загрузки данных с веб-страниц, а также отправки файлов и авторизации. Благодаря лаконичному синтаксису и широкому функционалу, Requests стала стандартом де-факто среди HTTP-клиентов Python.


Преимущества Requests по сравнению с urllib

  • Более читаемый синтаксис

  • Автоматическая обработка куки и редиректов

  • Удобная работа с JSON, заголовками, формами

  • Поддержка сессий, прокси, аутентификации

  • Поддержка всех методов HTTP: GET, POST, PUT, DELETE, PATCH


Установка и подключение библиотеки

Установка с помощью pip:

bash
pip install requests

Импорт:

python
import requests

Отправка GET-запросов

python
response = requests.get('https://api.example.com/data') print(response.status_code) print(response.text)

Получение JSON:

python
data = response.json()

Отправка POST-запросов

python
payload = {'username': 'admin', 'password': '123'} response = requests.post('https://api.example.com/login', data=payload)

JSON-запрос:

python
response = requests.post('https://api.example.com/create', json={'name': 'test'})

Использование PUT, PATCH и DELETE

python
requests.put('https://api.example.com/user/1', json={'name': 'new name'}) requests.patch('https://api.example.com/user/1', json={'active': True}) requests.delete('https://api.example.com/user/1')

Работа с параметрами запроса

python
params = {'search': 'python', 'limit': 10} response = requests.get('https://api.example.com/search', params=params) print(response.url)

Заголовки и куки

python
headers = {'Authorization': 'Bearer TOKEN123'} response = requests.get('https://api.example.com/data', headers=headers) # Получение и установка cookies cookies = response.cookies response = requests.get('https://example.com', cookies={'sessionid': 'abc'})

Отправка и загрузка файлов

Отправка файла:

python
files = {'file': open('report.pdf', 'rb')} response = requests.post('https://api.example.com/upload', files=files)

Сохранение полученного файла:

python
with open('output.zip', 'wb') as f: f.write(response.content)

Обработка JSON и форм

Получение JSON:

python
data = response.json()

Отправка формы:

python
form_data = {'field1': 'value', 'field2': 'value'} requests.post('https://example.com/form', data=form_data)

Работа с сессиями

python
session = requests.Session() session.get('https://example.com/login') session.post('https://example.com/dashboard', data={'key': 'value'})

Сессии сохраняют куки и заголовки между запросами.


Обработка исключений и ошибок

python
try: response = requests.get('https://api.example.com/data') response.raise_for_status() except requests.exceptions.HTTPError as e: print(f"HTTP ошибка: {e}") except requests.exceptions.RequestException as e: print(f"Ошибка запроса: {e}")

Установка таймаутов и повторных попыток

python
response = requests.get('https://example.com', timeout=5)

Поддержка requests.adapters для повторов:

python
from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry session = requests.Session() retries = Retry(total=3, backoff_factor=0.3) adapter = HTTPAdapter(max_retries=retries) session.mount('https://', adapter)

Аутентификация: Basic, Token, OAuth

Basic Auth:

python
from requests.auth import HTTPBasicAuth response = requests.get('https://api.example.com/auth', auth=HTTPBasicAuth('user', 'pass'))

Token:

python
headers = {'Authorization': 'Bearer your_token'} requests.get('https://api.example.com/secure', headers=headers)

Прокси и SSL-сертификаты

Использование прокси:

python
proxies = {'http': 'http://10.10.1.10:3128'} requests.get('https://example.com', proxies=proxies)

Отключение проверки SSL:

python
requests.get('https://self-signed.badssl.com/', verify=False)

Логирование и отладка запросов

Включение логов:

python
import logging logging.basicConfig(level=logging.DEBUG)

Позволяет отслеживать отправленные и полученные данные при отладке API.


Примеры практического применения

  • Интеграция с внешними API

  • Мониторинг сервисов

  • Скрипты автоматизации

  • Отправка уведомлений в Telegram, Slack

  • Агрегация данных из веб-источников

  • Валидация REST-сервисов


Часто задаваемые вопросы

Что такое Requests?

Это библиотека Python для выполнения HTTP-запросов с простым и удобным интерфейсом.

Поддерживает ли Requests SSL?

Да, по умолчанию. Можно отключить с помощью verify=False.

Поддерживает ли Requests асинхронность?

Нет, Requests — синхронная библиотека. Для асинхронной работы рекомендуется использовать aiohttp или httpx.

Как отправить файл через POST-запрос?

С помощью аргумента files и метода open().

Как повторно использовать соединение?

Через requests.Session().

Полный справочник по ключевым функциям библиотеки requests для Python

Установка

bash
pip install requests

Основные HTTP-запросы

Метод Описание
requests.get(url, params=None) Отправка GET-запроса.
requests.post(url, data=None, json=None) POST-запрос с телом (формы или JSON).
requests.put(url, data=...) Замена ресурса (PUT-запрос).
requests.delete(url) Удаление ресурса.
requests.head(url) Получение только заголовков.
requests.patch(url, data=...) Частичное обновление ресурса.

Параметры запроса

python
params = {'q': 'python'} response = requests.get("https://www.example.com/search", params=params)

Отправка данных

POST c data (form-encoded):

python
data = {'username': 'admin', 'password': '123'} response = requests.post("https://example.com/login", data=data)

POST с json (автоматическая сериализация):

python
json_data = {'name': 'Alice'} response = requests.post("https://api.example.com/users", json=json_data)

Заголовки

python
headers = {'User-Agent': 'my-app/0.0.1'} response = requests.get("https://example.com", headers=headers)

Работа с ответом

Атрибут Описание
response.status_code Код ответа (например, 200, 404).
response.text Тело ответа в виде строки.
response.content Тело ответа в байтах.
response.json() Преобразует тело в словарь (если ответ JSON).
response.headers Заголовки ответа (словарь).
response.url Финальный URL после редиректа.
response.cookies Полученные куки.

Работа с куки

python
# Отправка своих кук cookies = {'sessionid': '123456'} response = requests.get("https://example.com", cookies=cookies)

Сессии

Сессия сохраняет куки и повторно использует соединения:

python
session = requests.Session() session.get("https://example.com/login") response = session.get("https://example.com/dashboard")

Таймауты

python
response = requests.get("https://example.com", timeout=5) # секунд

Обработка ошибок

python
try: response = requests.get("https://example.com", timeout=5) response.raise_for_status() except requests.exceptions.HTTPError as e: print("HTTP ошибка:", e) except requests.exceptions.RequestException as e: print("Ошибка запроса:", e)

Загрузка файлов

python
response = requests.get("https://example.com/image.png") with open("image.png", "wb") as f: f.write(response.content)

Загрузка с передачей файлов

python
files = {'file': open('report.csv', 'rb')} response = requests.post("https://example.com/upload", files=files)

Аутентификация

Метод Пример
BasicAuth requests.get(url, auth=('user', 'pass'))
Token headers = {"Authorization": "Bearer <token>"}

Прокси

python
proxies = { 'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080', } requests.get("https://example.com", proxies=proxies)

Отключение SSL-проверки

python
requests.get("https://example.com", verify=False)

Повторные запросы с requests.adapters

python
from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry session = requests.Session() retry = Retry(total=3, backoff_factor=1) adapter = HTTPAdapter(max_retries=retry) session.mount('https://', adapter) response = session.get("https://example.com")

Простой пример