🔖 Справочник: requests и HTTP

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

⚡ Шпаргалка: самое важное

import requests

resp = requests.get(url)                       # GET
resp = requests.post(url, json=data)           # POST с JSON-телом
resp = requests.patch(url + "?token=X", json=data)  # PATCH
resp = requests.delete(url + "?token=X")       # DELETE

resp.status_code   # int: 200, 201, 404…
resp.json()        # dict или list
resp.text          # str (сырой текст)
resp.headers       # dict заголовков

assert resp.status_code == 200
assert resp.json()["name"] == "expected"

Методы библиотеки requests

МетодHTTP-методОсновные параметрыНазначение
requests.get(url, params=None, headers=None)GETparams — query-параметры dictПолучение данных
requests.post(url, json=None, data=None, headers=None)POSTjson — тело как dict (автоматически сериализуется)Создание ресурса
requests.put(url, json=None, headers=None)PUTjson — полная замена ресурсаПолное обновление
requests.patch(url, json=None, headers=None)PATCHjson — только изменяемые поляЧастичное обновление
requests.delete(url, headers=None)DELETEТело обычно пустоеУдаление ресурса

Объект Response — атрибуты и методы

Атрибут / МетодТипОписание
resp.status_codeintHTTP-статус ответа: 200, 201, 400, 404, 500…
resp.okboolTrue если status_code < 400
resp.json()dict или listПарсит JSON в Python-объект; вызывает JSONDecodeError если ответ не JSON
resp.textstrТело ответа как строка (всегда, даже если JSON)
resp.contentbytesТело ответа как байты (для файлов, изображений)
resp.headersdictЗаголовки ответа: Content-Type, Authorization…
resp.urlstrФинальный URL (после редиректов)
resp.elapsedtimedeltaВремя выполнения запроса
resp.raise_for_status()Вызывает HTTPError если status_code >= 400

HTTP-методы и статус-коды

МетодОжидаемый статусREST-путь (пример)
GET (список)200 OKGET /company/list
GET (по ID)200 OK / 404 Not FoundGET /company/{id}
POST (создание)201 CreatedPOST /company/create
POST (авторизация)200 OKPOST /auth/login
PATCH (обновление)200 OKPATCH /company/update/{id}
DELETE200 OK / 204 No ContentDELETE /company/{id}

Установка и проверка requests

# PowerShell (Windows)
pip install requests
pip show requests
pip install requests==2.31.0
pip install --upgrade requests

Передача данных в запросе

ПараметрКогда использоватьПример
json=dictТело запроса в JSON (автоматически ставит Content-Type: application/json)requests.post(url, json={"name": "test"})
params=dictQuery-параметры в URL (?key=value)requests.get(url, params={"is_active": True})
headers=dictДополнительные заголовки (токен, Accept)requests.get(url, headers={"x-client-token": token})
data=dictТело как form-data (устаревший способ для JSON)Избегать для JSON — используй json=

Модуль json: полезные функции

ФункцияЧто делает
json.loads(string)Строка JSON → Python dict/list
json.dumps(obj)Python dict/list → строка JSON
json.load(file)Читает JSON из файла → Python объект
json.dump(obj, file)Записывает Python объект в JSON-файл

Методы CompanyApi (из лекции)

МетодHTTP-запросВозвращает
get_company_list()GET /company/listlist[dict]
get_token(user, password)POST /auth/loginstr (токен)
create_company(name, description)POST /company/createdict (новая компания)
get_company(company_id)GET /company/{id}dict
edit_company(id, name, descr)PATCH /company/update/{id}dict
delete_company(company_id)DELETE /company/{id}dict
set_active_state(id, is_active)PATCH /company/status_update/{id}dict