🔖 Справочник: requests — шпаргалка

← К оглавлению урока

⚡ Минимальный набор requests

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"})

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

Параметр Тип Описание
paramsdictQuery-параметры: ?key=val&k2=v2
headersdictHTTP-заголовки запроса
jsondictТело в JSON; автоматически ставит Content-Type: application/json
datadict / strТело как form-data или строка
authtupleBasic-аутентификация: ("user", "pass")
timeoutint / floatТаймаут в секундах (рекомендуется всегда указывать)
verifyboolПроверка 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)

Полезные паттерны в тестах

Базовый URL в переменной

# test_api.py
import requests

BASE_URL = "http://5.101.50.27:8000"

def test_get_companies():
    resp = requests.get(BASE_URL + "/company/list")
    assert resp.status_code == 200

Проверка Content-Type

# test_api.py
def test_content_type():
    resp = requests.get(BASE_URL + "/company/list")
    assert resp.headers["Content-Type"] == "application/json"

Авторизация и получение токена

# test_api.py
def get_token(base_url):
    creds = {"username": "harrypotter", "password": "expelliarmus"}
    resp = requests.post(base_url + "/auth/login", json=creds)
    assert resp.status_code == 200
    return resp.json()["user_token"]