import requests
# GET
resp = requests.get(url, params={"key": "val"}, headers={"Accept": "application/json"})
# POST с JSON
resp = requests.post(url, json={"name": "test"})
# PATCH / PUT / DELETE
resp = requests.patch(url, json={"field": "value"})
resp = requests.delete(url)
# Ответ
resp.status_code # 200
resp.json() # dict / list
resp.text # строка
resp.headers["Content-Type"] # заголовок
Установка и импорт
# Терминал
pip install requests
pip show requests
pip install --upgrade requests
# В коде
import requests
HTTP-методы
GET — получить данные
# Простой GET
resp = requests.get("http://5.101.50.27:8000/company/list")
# GET с query-параметрами (?active=true&limit=10)
resp = requests.get(url, params={"active": "true", "limit": 10})
# GET с заголовками
resp = requests.get(url, headers={"Authorization": "Bearer my-token"})
# GET с таймаутом (в секундах)
resp = requests.get(url, timeout=10)
POST — создать ресурс
# POST с JSON-телом (Content-Type: application/json выставляется автоматически)
resp = requests.post(url, json={"name": "Test Co", "description": "Desc"})
# POST с form-данными (Content-Type: application/x-www-form-urlencoded)
resp = requests.post(url, data={"username": "user", "password": "pass"})
# POST с заголовками и JSON
resp = requests.post(
url,
json={"name": "Test"},
headers={"Authorization": "Bearer token123"}
)
PUT — полная замена ресурса
# PUT — заменить ресурс целиком
resp = requests.put(url, json={"name": "New Name", "description": "New Desc", "is_active": True})
PATCH — частичное обновление
# PATCH — обновить только нужные поля
resp = requests.patch(url, json={"name": "Updated Name"})
DELETE — удалить ресурс
# DELETE по URL с токеном как query-параметром
resp = requests.delete(f"{base_url}/company/{company_id}?client_token={token}")
# DELETE с заголовком авторизации
resp = requests.delete(url, headers={"Authorization": "Bearer token123"})
Параметры запроса
Параметр
Тип
Описание
params
dict
Query-параметры: ?key=val&k2=v2
headers
dict
HTTP-заголовки запроса
json
dict
Тело в JSON; автоматически ставит Content-Type: application/json
data
dict / str
Тело как form-data или строка
auth
tuple
Basic-аутентификация: ("user", "pass")
timeout
int / float
Таймаут в секундах (рекомендуется всегда указывать)
verify
bool
Проверка SSL-сертификата (по умолчанию True)
Объект Response — полная шпаргалка
resp = requests.get(url)
# Статус
resp.status_code # int: 200, 201, 404…
resp.ok # bool: True если status_code < 400
resp.reason # str: "OK", "Not Found"…
# Тело ответа
resp.text # str: сырой текст
resp.json() # dict/list: разобранный JSON (JSONDecodeError если не JSON)
resp.content # bytes: бинарные данные
# Заголовки
resp.headers # dict: заголовки ответа (case-insensitive)
resp.headers["Content-Type"] # "application/json"
# URL и история
resp.url # итоговый URL (после редиректов)
resp.history # список Response для редиректов
# Исключение при 4xx/5xx
resp.raise_for_status() # HTTPError если status_code >= 400
Session — сессии
import requests
# Создание сессии (переиспользует соединение и куки)
session = requests.Session()
session.headers.update({
"Content-Type": "application/json",
"Authorization": "Bearer token123"
})
resp = session.get("http://api.example.com/users")
resp = session.post("http://api.example.com/users", json={"name": "test"})
session.close()
# Рекомендуется через контекстный менеджер
with requests.Session() as s:
s.headers.update({"Authorization": "Bearer token"})
resp = s.get(url)