Eazy SDK
  • Руководство
  • Интеграции
  • Архитектура
  • API
/

Начало работы

  • Начало работы
  • Установка
  • Быстрый старт
  • Основные понятия
  • Что дальше

Разбор на примере

  • Что строим
  • Вход в три шага
  • Чем вход может закончиться
  • Капча на входе
  • Обновление сессии без ручного повтора
  • Чтение всех писем по частям
  • Отправка письма без опасного повтора
  • Шифрование полей и всего тела
  • Сборка HTTP- и браузерных роутеров

Руководство

  • Руководство
  • Собрать HTTP-запрос
  • Объявить HTTP-операцию
  • Подставить значение в путь
  • Добавить параметры запроса
  • Добавить заголовки запроса
  • Передать cookie одного вызова
  • Отправить JSON-объект
  • Отправить HTML-форму
  • Отправить файл
  • Отправить готовые байты
  • Преобразовать публичные поля в тело запроса
  • Сохранить и изменить запрос перед отправкой
  • Назвать адрес сервиса и запросить ссылку из ответа
  • Обработать HTTP-ответ
  • Получить типизированное значение и метаданные
  • Разобрать ожидаемую ошибку API
  • Извлечь типизированные данные из HTML
  • Прочитать исход из адреса перехода
  • Разобрать ответ, где исход лежит в теле
  • Выбрать способ авторизации
  • Передать Basic credentials
  • Передать Bearer token
  • Передать JWT
  • Передать API key
  • Передать session cookie
  • Собрать требования AND и OR
  • Войти и получить сессию
  • Повторно использовать сессию
  • Разложить сессию по запросу
  • Сайт ведёт сессию на куках
  • Обновить сессию
  • Обойти страницы результата
  • Подписать запрос
  • Зашифровать payload
  • Обработать защитную проверку
  • Повторить временную ошибку
  • Обработать HTTP redirect
  • Ограничить частоту отправки
  • Собрать SDK для нескольких сервисов
  • Передать зависимость запроса
  • Добавить middleware
  • Описать протокол с конвертом
  • Объявить WebSocket API
  • Проверить SDK локально

Интеграции

  • Выбрать HTTP-клиент
  • Интеграции
  • Подключить HTTPX
  • Подключить Requests
  • Подключить curl_cffi
  • Подключить свой HTTP-обработчик
  • Выбрать браузерный драйвер
  • Подключить Playwright
  • Подключить Pydoll 3
  • Различить исходы страницы
  • Разделить вход между вкладками
  • Подключить вкладку из пула
  • Выбрать библиотеку моделей
  • Подключить Pydantic
  • Подключить msgspec
  • Использовать dataclass
  • Подключить Adaptix
  • Извлечь данные из HTML
  • Отправить и разобрать XML
  • Сгенерировать SDK из OpenAPI
  • Сгенерировать SDK из AsyncAPI
  • Хранить аккаунты и сессии
  • Создать регистрацию
  • Подтвердить регистрацию
  • Подключить SQLModel
  • Обработать Cloudflare Challenge Pages
  • Подключить Cloudflare Turnstile
  • Подключить reCAPTCHA

Архитектура

  • Слои и границы
  • Путь запроса
  • Попытка и повторы
  • Выбор варианта ответа
  • Identity и сессия
  • Точки расширения
  • Браузерный слой

Справочник

  • Справочник API
  • API methods
  • Clients
  • Extension SPI
  • Подготовка и тестирование
  • Request API
  • Response API
  • Сериализация моделей и codecs
  • Auth
  • Session
  • Registration
  • Verification
  • Dependencies
  • Middleware
  • Signing
  • Payload crypto
  • Protection
  • OpenAPI
  • SQLModel
  • Browser
  • XML
  • Миграция между альфами
  • История изменений

On this page

  • Дальше
  1. Eazy SDK /
  2. Передать session cookie
View Source Open in ChatGPT Open in Claude

Передать session cookie#

CookieScheme подходит, когда значение session cookie уже известно. Имя cookie задаётся в схеме, а значение хранится в Identity.

→ Запрос · GET /auth/cookie

{"headers": {"Cookie": "mail_session=session-1"}}

← Ответ · 200 OK

{"credential": "session-1"}
# examples/docs/auth_cookie.py
MAIL_SESSION = CookieScheme("mail_session", name="mail-session")


@dataclass(frozen=True, slots=True, kw_only=True)
class GetInbox(HttpOperation[AuthResult]):
    __http__ = Http.get("/auth/cookie", security=MAIL_SESSION)


class InboxApi(SyncApi):
    get_inbox = op(GetInbox)


def main() -> None:
    identity = Identity(auth=(MAIL_SESSION.static("session-1"),))
    with request_client() as client:
        result = InboxApi(client, identity=identity).get_inbox()
    print(f"session: {result.credential}")

CookieScheme("mail_session") управляет только объявленным значением. Обычные cookies клиента могут существовать рядом, но не удовлетворяют security=MAIL_SESSION без источника в Identity.

Если cookie выдаёт браузер после интерактивного входа, используйте мост браузерной сессии из главы о сборке SDK, а не копируйте заголовок вручную.

Файл целиком
"""Attach a session cookie through a declared scheme."""

from dataclasses import dataclass

from pydantic import BaseModel

from eazy_sdk import Http, HttpOperation, Identity, SyncApi, op
from eazy_sdk.auth import CookieScheme
from examples.docs.request_site import request_client


class AuthResult(BaseModel):
    credential: str


# region docs: auth-cookie
# examples/docs/auth_cookie.py
MAIL_SESSION = CookieScheme("mail_session", name="mail-session")


@dataclass(frozen=True, slots=True, kw_only=True)
class GetInbox(HttpOperation[AuthResult]):
    __http__ = Http.get("/auth/cookie", security=MAIL_SESSION)


class InboxApi(SyncApi):
    get_inbox = op(GetInbox)


def main() -> None:
    identity = Identity(auth=(MAIL_SESSION.static("session-1"),))
    with request_client() as client:
        result = InboxApi(client, identity=identity).get_inbox()
    print(f"session: {result.credential}")
# endregion docs: auth-cookie


if __name__ == "__main__":
    main()
session: session-1

CookieScheme подходит, когда значение куки приносит вызывающий: ключ API, готовый идентификатор сессии из другого места. Сессию, которую сайт ставит и меняет сам, ведёт объявление Cookies(...); на одном сервисе они не сочетаются.

Дальше#

  • Вести сессию сайта на куках

  • Войти и получить сессию

  • Повторно использовать сессию

Previous
Передать API key
Next
Собрать требования AND и OR

Made with Sphinx and Shibuya theme.